Add Traefik-Forward-Auth Proxy
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Tobias Manske 2022-10-01 15:34:55 +02:00
parent a5b54b5982
commit 4f8b15ca3d
Signed by: tobias
GPG Key ID: E83C743C1FC2F79A
5 changed files with 237 additions and 165 deletions

View File

@ -12,6 +12,7 @@ services:
volumes: volumes:
- "/var/run/docker.sock:/var/run/docker.sock:z" - "/var/run/docker.sock:/var/run/docker.sock:z"
- "./traefik.yaml:/etc/traefik/traefik.yaml:Z,ro" - "./traefik.yaml:/etc/traefik/traefik.yaml:Z,ro"
- "./dynamic.yaml:/etc/traefik/dynamic.yaml:Z,ro"
- "acme:/acme" - "acme:/acme"
networks: networks:
- gateway - gateway
@ -19,6 +20,34 @@ services:
environment: environment:
CLOUDFLARE_DNS_API_TOKEN: "{{ traefik.CLOUDFLARE_DNS_API_TOKEN }}" CLOUDFLARE_DNS_API_TOKEN: "{{ traefik.CLOUDFLARE_DNS_API_TOKEN }}"
traefik-fa:
image: thomseddon/traefik-forward-auth:latest
volumes:
- ./traefik-fa.ini:/forward.ini:ro,Z
environment:
- CONFIG=/forward.ini
networks:
- gateway
depends_on:
- traefik
labels:
- "traefik.enable=true"
- "traefik.http.routers.traefik-fa.rule=Host(`traefik-fa.tobiasmanske.de`)"
- "traefik.http.routers.traefik-fa.entryPoints=websecure"
- "traefik.http.services.traefik-fa.loadbalancer.server.port=4181"
- "traefik.http.routers.traefik-fa.middlewares=sso@file"
# whoami:
# image: containous/whoami
# networks:
# - gateway
# labels:
# - "traefik.enable=true"
# - "traefik.http.services.whoami.loadbalancer.server.port=80"
# - "traefik.http.routers.whoami.rule=Host(`test.tobiasmanske.de`)"
# - "traefik.http.routers.whoami.entryPoints=websecure"
# - "traefik.http.routers.whoami.middlewares=sso@file"
volumes: volumes:
acme: acme:

View File

@ -0,0 +1,7 @@
http:
middlewares:
sso:
forwardAuth:
address: http://traefik-fa:4181
authResponseHeaders:
- X-Forwarded-User

View File

@ -0,0 +1,20 @@
default-provider = oidc
# Cookie signing nonce, replace this with something random
secret = {{ traefik.oidc.cookie_secret }}
# This client id / secret is defined in keycloak-realm-config/master-realm.json
providers.oidc.client-id = {{ traefik.oidc.client_id }}
providers.oidc.client-secret = {{ traefik.oidc.client_secret }}
providers.oidc.issuer-url = {{ traefik.oidc.issuer_url }}
log-level = error
cookie-domain = tobiasmanske.de
auth-host = traefik-fa.tobiasmanske.de
# Add authorized users here
{% for user in traefik.oidc.whitelist %}
whitelist = {{ user }}
{% endfor %}

View File

@ -4,6 +4,8 @@ providers:
docker: docker:
network: gateway network: gateway
exposedbydefault: false exposedbydefault: false
file:
filename: /etc/traefik/dynamic.yaml
entryPoints: entryPoints:
web: web:
address: ":80" address: ":80"

View File

@ -1,166 +1,180 @@
$ANSIBLE_VAULT;1.2;AES256;secrets $ANSIBLE_VAULT;1.2;AES256;secrets
62366332616464303231643738616135396537666238366535396536396230623266303161653164 35366461636534323137613362623236383666656462643432363538333833386332363030653661
6331666366336239376162613534663566383166666562380a373234316139343561663034313262 3964396638393832653565313465376533396166386535370a343534623038373936653836666536
34623435393831613339356134646166366634336336346236346335356638346430663066636137 65326161316531663133663236323862633737333334383162346564373561333338323338323239
3239393438333161660a646436353437393733646364646265396434393062626636633939356336 6536336562326165330a326162633766663764396332616636316432336531333037303639633038
39323432373762373439333736633436303031613732363165626162323331303034666330633733 39353961333666653363313730326138643230346531366366323339633035306138613062383932
62643362623465326365343737626162333663363638393766656464613261646231633561613065 66383034313032366539356530383637363932313439366334333766333264616332633061626235
66353032663464363835343165323062303535663763666131353130396437653665656164393132 38656564373730643961616439363231316631356466363138346335396262356639616663653631
61313963383835306465633562633763653463636638373164656565343632643536313835623630 38366166396262616163373035386137303165343263653239396363303833633137306666646231
30616539353634303734313530346436313030643266653836303566366365323638326432333535 37343565376563636236623231643637633434326562613038653164636136663339613339626164
62623833326537666166303339306362643763326565343636653830366233636365343936666430 65363833346262383431663435376239616433393132323862356434363133303634336538613865
34643466626235613932666636613063383464666466366266373232353732353266306539366564 39356534616234386631326535336466666339386438633765313936333866306563646439323435
34353336376632376130373034373664323566366666343731633963653865303464626365383662 36653465646332616165643862313730663864653932383933383061383333316336613135663730
66313532363030376434643661353635396361636665633233633539613166376535613237366435 34623366613431613761653732623263646234613064393536306562316133636135316365666362
63646632613336316165303030353663623566316465376533396530376334353337386661656132 30613435616365356330313133643465626433626637646534326665366363323838353934336130
63643739653331366365333931353532363131323937313461353564326334623165646433336630 33303162646638613230623964393435653964633436336230353466636432333963396633343661
35646265663734303539363335613862386463663166643061346333633339656639363936363561 34663737373862333838313162623331636637386235373333396362633438656134353863393938
38646662623132646137376666336538333934633232643164626234393664316463663635643332 35343664333639366533633661623838653734656533663062653034356337626436396536643133
36356239303836373437653535626634613663613238373931626338383866353733346133323465 37353731613962633038346563656266623238346438366165323136356433666132356436626264
38646335656437613830613663343263323632613862353964373636663637393230316637366265 37316463376638356163376235336664373039346538383961393837346232666236396631383533
63303430656262643235313631633334653733343133626562626138353935336363613230643631 31643530373531326632303035646134663865386363373030646166656130663631323235643130
36313463373639336530343630613635666461353533333966623831623932363039663765303236 38626365313133393630316664343934396639633935326435366363316236363536343163643031
38326435633230373761396337363838373161633932653237396433386438356633353262313030 66386463626632373862343732343430636536346530303663373162656535346139643636383534
61633563383762333431343061323866396565386238346432366363356137633266356238353138 34646339366233623131353066616562386235393733323231383639613563343134643536643036
37303761363863353235323165323966333034303931646166613762613463646163656661326431 33333735353337343764636337343936313562636437663833346237376430623666646162326531
64653561383334626236633138343731316633353931656133373834333731393565316336336634 31636362643039643435353639653364326330633661363932623633303034653332646338336365
31393264383532623461323766626164653864366436613461336364366366636465353166613261 34353733613661303364376538626538373638303039333164396664643265336634313262633038
37353931386134376437336461636239343939306565633437356566383631656537343033663136 36616430393364636135656132363962306362383238386639303766346165623639613262656531
65356532326332356662323164326465613336666165663135376436386239346163316561626364 65353863326164363039633232346464663737653964313466356538333434356336366533616637
31636163643138626538303665353663666661366662643136303662343862366235653566376330 37616632363032376161326665666536303431613939663964646164353734383536663063633833
34386536373734623666653865353063643435383734323732666436333137376162333466623230 33343034356335393461653635303362666231353133313736626562396235363735356461633439
31393139396333373765363433383838646532306131363530613030326634323162613234636163 39356564666635656337323364393433326437373736626535653635306166656131303666643137
64336161313835333136376334346361383563393563396135356631653934663932346431663966 36343133636439626335353230323961333037306361303332303034343765366233643439393532
61363462633464313633633239613736653030396535303061343439633261633438616162346637 37366565343935346132633931323839636338336632656263303631353233613532316538323733
61616139646638363338393633613435376237376130643665376336656237356132643438386437 34356464393363366536333735313465326137613263356430313132653836303333363335633962
63653865346139333761626637613561346264666566363565393162353631366632663139323464 63623164343864633265303236373133316639386632363936396534616139383464383638616436
34346533356361376630323835663339356536346561353161653366306461643336313463613637 37653137616434373661333761656432353164383562626133306164353164656465623231643361
65346133623963643864303662613930366264626538323234393539633034613962303966366166 64396234313533333364656633626537343430633163356639636639623162376635316338323034
37356438633535646562656135353537363035653734366134646130316436386635316162323931 63623661323961646162306534633633333639316637383166633733353432313635363338336335
36666565623730643662643864353361393962363930653564643861626632633838643039336461 35366134363365623665363735313734336564343731336434666239626265323861313833363032
62313533383038613833383131393266323962313037626438316361666662623431633038653936 61306164396262303865373135613030333365633839643065616561363361303539363365393261
39313830643062626233656162643631623861353134613365613537313263646635636631373465 34653231613738323335653938323865333438356661396334633731356331343835386530343762
30393663663364343030386561343936303364316366346232333265623634346233663263343435 62326366366232663936666266353664623062356562313038323839366635313934636264336336
62656462396538346633343634623864346230653964353139666537323338626666633038613334 30626631303838383535303135303136666165666531356333643135376137643135393334636466
62386438326335616137353132656233383435643866633364313633383438646330363066363734 64336463373764636237343836623834653530643633666632373066643034323032383335343239
34626334346531366532653230333366333731373230303861353337303836633666653538376263 62626532656435396561613435613236323037393530613365353163386266343133303062373436
36376430303738633365633661653165373936663731626130656532656131323332316163653434 33313162363338636264616464356661653437343464393365616439306539643030646137623432
39363162626635613837393065396234393137376562623461313161653364656563326134663738 33623965623238373530373264383361656438653163346133653333643235396461373962663863
31303532616266323365333264363662306662643131386232373963333265623632346261303238 66323963616261396366333535333233393933623764366466316662633966306464643566626565
37623332393838303461353238393430666637373336373034646165663733346565346534643364 38336238633338346639646363363233623431663431613561303134393239663561393566386664
36656338363265396330383633643031353738666338663662633439363463363263643163613431 35356163386539356437666162353234613364613461393839633064313562356635663135316263
36353230636539333933613832336238613938393031623461366331616139373630313337303062 31353835653531663139313033643834353863376666396134643062383666636162316366316230
37646234306266363766303636333165393730373466616565393031656239303064356639313938 38363766383463333831363966626535363933633463653834636364346261656462333830386332
63373463396166643461323639323130646332623135303931343535376132386533653030356238 38663366653331376236616465643637636538323334336632626538383237333236306566346163
64633764343462656163366466626563656331636233643439306133333138346162663535663539 61313637376239353138346435633636366465613934616662326238336261303162376530663630
61333335353430313761653536376233653233363734393137386134326139643766643439386130 36613031656534366233376362646666373330393561373863633334346531663633303665303638
33623136363638316438633864633862623234323839653034353863316537636536383435383265 38613162393935653835613739363763656439643665353038393466653334626565353131363264
61316566303166313664656562386536343536303264353336353330626464643937393663613463 32326264363561616664313865376337633438623537623635383939303634333661376638623330
64366136303033336566643264616136386531646635633235653937623965306165363161346562 64316437633239313838326232633839353430373632326431633638346530336538303239666532
35356535633131333134393637373665326631653936363964633833373636363365353435313064 34626565316135363237343433373932646162363066613963326665613666303430333933393166
31373763313130376136323465633463636534323730616665363965303137393734313164633139 39643737616362313663396132353763383939303361383534343039303139396164663036626131
65633766663162346634656331666662633966373034623131623137373433623832623738626530 32366134306264643030316465376536396166336634313465383236653433353235346232373434
38323463363237643835666232653061626265613761653131653935343461333932646138323565 34316338636330326430653732383238313865306266346137613331303563343439363530303763
36396438333635613561313136613633383238336336656465313766666461373431633434373164 38393932333463353663653530303062613633646562373163663065363633626133616439346535
31643331343034613133356533313036313936646566613862656436366537383362343461313434 64643064633564623261333930663565363234386566383839663134613763653333376436616230
65643465363263316331303866356433323466393064613365643935613134656532323430316336 61393461653137633263353663646562653132366363646366633439333364656130306661363033
33653835353236333864313761323866616438363132373634633139623431333663653564303138 39633032616462623439633764323134326563656234646562303163366562363363643236336430
33646534363664353437393065396336343066636539623065653063373863346463653432393262 64363032316137313463633163386665616331366366346335306538386539663064663037343930
34393363643331613463383931313738366331343863373535643235663164323965396265386135 34653366396366333438653136356131643234356465313537666334313262393033356363323536
39396532343637363138653330373334643539343038396331623439313366656533626632656539 66366339376230353862303133356337363731376633653163356233633236383735646533346364
30643864666135323265383666613963323633306665333930333935643233633639643665623534 64376632656437333832323431613764356235303263353139333635343430316631376436313038
31373931653661333163333961303232303431613135666537333234626536663561373939356533 63376631623837646664623136303238633830383036303066333337663933663831633735633234
30353732326364353163363436646231613264626534333163376531313338376564623265303961 61616138613635386531303361373135666563626233306631613337663630353161353434636332
34386239653831396332396232313366656531363631656164343962623636366563656530363635 36326365316462383830303939396661636239323464656265316537313261386136383766393530
35323236396336336466363236343133653065633534613237643834643965393936336465623734 34653736393930313934366665306462336264656161303562616362623731646635613065636266
30336131376230663065373261383336386463643732373461386138626630623661336238643765 31656564633032373665343630373233646536363032373034303065356462626338626363633631
63623263666130643730303662386436666239363537383336333430373637326531303533393834 66386335613864613034333764396534316266636331386166363434616166363135656132646263
33343432626561323839643736373662323337333537663739633863383662353031363439396335 61366237643063633030376163396162326239396439363939383534353831626636393039656561
62623762383931306635663339356263633433306237306137646236623138343561636464656266 35643635363537393930336530633636353636666530623538306136363534633961306266323963
35323639653931616132663739333236613335383961356136336162393739663234383963363363 33323734616365343337313365666564336465646230343131386636646364376533656333643535
31313335303865333930386639613562646339323963323632353033316564376238333431643134 37363161313862363138616562333765333237633162383334303935336438656339633831356334
35396333356432633930616532656661663934333332353932636663393834653437613831623661 36393966303239343161326561346530393732626232306430383430373266383761343462373636
65313762353261356266623234343766636566343633343637636332343630663666303739363735 38356261326439323264376261646534393131323032663936366231633235303039313437383530
38336462363331333733643235653934333735653966383964363130653834356331376266363066 37333761323832613430633965663638386566303435643239623465306234626262656261626230
30613235313332636566376533336462626330613435363639303236353130356263353562663235 63393365393135303934613436303134393530346139616138343061646162346531356435623766
64653861393665616361623663313331396533393935323735363364376261313139393935326264 33633333626665363362383964313930343234336132623334306163383131303232383630373164
62356262363830313334346265336435363130653630306638613764623939356439616435376534 64376439303362616335353538386464366435383736643666373461613234396330666464616632
33383438366537613534353430613632663337643162393363633938393637373739336364643534 30383661616338306331316533356232323265323833373961376233663933643762643431333035
37343935346639633036303661656238386662386133656632373862346533626635303230343133 62653964386133393936396430333033366566633736333666636236653034343630316165663561
37366633646536663262323237343733653738373531356237396635653861346339336561623135 30616435383333366232313930303166306430643938373032393163643962326137366331383165
65396538613764643032643632343334623766663736653237323864646661363162373937646466 39383661326537643636336339643563653764346439636638656166386266656337303466653533
34613435383765363434323665333430666166313036323665336538323538656339616433303834 32346337373664333466666632646532663566623339653932633038646533336662656639303461
34303235643362383364343266353465643231643161663236363264663032386430333437313630 66656138396539626466323335306230343930646636653835626633323330316266666162303932
32613939383165363937383135373436386236383837636332383865653934366165346335666431 39353337656333353534616539346437623063323366626161323532323032626339306133363132
36313739383261393966336336623962333063363138383264353563303330653362373362653732 32396463613866666535393762396130306532343936326432663166663761366338636533313735
65386466623530303161626665393762396564336662356237346534393338666134326331383265 65306364643831383164373030623136663066653363613733643632383734313739316661356338
63653361333535333031636262303634363135303161376635633864386366613662663565663738 30656363313664366666623161333632623232316266643238616537666664313264316133623438
36623861343332626165623261383535303335613333633033383731333661323237316139346265 61373662326433613939356266336662633633356365353730653630623036306632373032363437
37666463653434363935366338323666633839666332636238616636666430666263613930623165 62373832616637303538626431366238616133386435323635336530386266383462646331633635
32626230373534626362333262376364353865653636343931666166616430613339363434636263 62363133363661623337613264353161363931313539343430376164626564346437653165663234
64376639316334333739613161663531383330633531343139383737366333303862386132303564 62313563613163386331306630656530643461663732643533663835373231613462346664643639
62386333643838333932663439653162316238636433323262633531353238373338643335636133 31653461353962623164396639626138616163383135353731383236353335656662353261363534
63333837656265633833343234623361326539366437623731333737306430633536353033636234 66373264303439383265323964633630323266313138336137313765313661353432396666396364
38663064663637653465326234306335653863383130336464613738396532363232303364373138 39343165666537643166303131316239306437646339653666616236323239316339306566666632
64326134626564333038326636613031316230396362343339666435313633333262353764633862 63393164636661376132356431386564633365373330333437313964356436363662653066666366
39326230663232613366313863323836393964363062616563616638316635376638343034666639 65353365363466313931643835376335386561633536366164393731646536363666613562396135
65316366353038303633356533313035336262373866303134636539656566363862316166636630 32633665633262373035396435363639396633643565613732633461323665353835643034373961
35646363643862636265643330313232623735623232623231386263656166373861363434346134 38303765666462623435633730613433343461366532393236386561313930306365323834316464
37623635316364386234373238613162633435366166373936383738376164333139613634623039 62333363636132646538616439316264646565343562306365326463643864343537666563636537
31326235326531313861643863303363353537616331313534366633383961346437316438353338 34313964636265633230356635646561646538323731323664363562313836393965343130326630
66626332636439613566386366346163656561313334393635616338306330306432346234666365 65633434643634663438316139326534656262663938366232323336663237323638333837653939
39353931666231353030363665343632646664323830303233396432623365616135313465393933 32303838313033386262316134633861326639316261363865666463326633333233393965356232
61326338326365333232303434343637343664336561396639316666363861656364386264353932 65633364613861646164633466336135316536633833336137626536623837663965366437313538
33386537356432353239336462643031376535393838343263663035353465323031663231346234 62353139616532343062383938376139313334626334646261323936653236353464646536396634
30653539386162663864643736353535353966633963363138633538663933326130643833656464 33346131323832643664633861616130623538396536363235303638323634623762653731613566
35623764336362613165336431393766306161303935396530653436353338646534353230393939 33343066653266643165323535623331383431346161323238633530356233623365343862313730
65633031373566393939373265653466303166623837316532363965366131393931616332623561 31333632313632666433663832366661626238373939653830653138366537623130643832626261
61316164386135373531386664376239663163353332656163646237376661383835666563303063 36313431646466373865303834613034626364633564386565373735326430353430613332303033
64326136353431393664306662306435393231333931373136643832626633663865303562643230 31383536323866656131313663366537333963616462363062313962313530626437366366303334
39643462346264616131613335363337336164333433316133666233306431346134613931353834 34316632333936343566313934316132643632303734353033626535343339303730353266616435
37383432363635313665633434383535656535353535643930663236306531396664636239653962 32336634643338343762626532306638326433623065663238666563353335346135353033323938
34313938353533363232663330366432353864303464336163346165363534623164663762326636 38323035316133636430633766323933666637623762386266383834363966643632613836383937
33633961653738633038346334653739386338343533653537326466323663316163646664636431 37346331633233626561653239373561663763636461303365303665616564333562386664633434
62346463313036383233623434383535313362326335323166396234396436636236313236663532 62613064373265663333616263343962336433643139376662373566363837656564666232663733
31663537666134336465613663303363616563333032343764366361636464633139666133633766 64323964353264643438623961633130616166376435326533346336386330386239356130363733
66643039653062386138383136663937353261613931633539363436373461636163663730633064 62643733386466626335633436623262383231303535613066326431343863363466373433653266
64383734653830363666613533303232393739383439643063303838356334613666323466326535 65636630393133383863386263326662383161653636316231633066353233313530306131393436
35326635656131393039336666386639353165326631303638653336623062666565643561623862 37613232656361616461326430383435396264386364333463613563383062636637613439346231
32656531343563653163373237633466306462306635626138396363363161663232313032323032 39656437323265656661613136376136653739366336393765383731353337623832303563363563
64383265633035663664353731373236363462643931386633306330663764613266626664313239 36383439616138633561636136663862643839356533376335666438356437313030363861346230
30616334616261386133653338336437643761303838343761656133333537343063386332343730 35306232343236666466323739353933366436313964373136333361383138633362323134353966
31643966313566653536386337663834363733663337366337316566666462383364393966326430 34363736366232343332633564303236613965613763663931323234613834643366323230616165
38346564393835343330653232373064643036353239356331623737303331373965313738653631 31383333616533626166323366373939356638373864303763653362643566366634353432393261
36633530393665613331396162633736363062616134623632333366313631393064306537336463 33396630353365333563326461656364376435396433343734383130636539656530663266306561
64666132636136303966643435633335356435306230336338363734633730653532666433656538 32643737613664363862323035333634353864303036323462333535313034643363376134376639
36663039636637363062353163346462663062313438653033306137373066346338653063373535 62326561316633376330653038353065393264376465636262613634303763396164656166393539
37306334393835373963383834326435363033353737353633313966323532613162326131366239 39346238363861353134653136626331346464323439613937393733316232633139346534633437
35343539393131316464393463323466383432343239323734353061613361623061303536666162 64626632393733356435663531393530346261643636356338323062626635303866383833396632
62393239383730666330663464316331363137383031373533396433616232366532326462653266 61376331326266353835613030376566353964393735303935363234366139663561363931386636
33663433303834346163393530333632643236623561396466663762393737316335313665376230 63386238326538313765623665653330326438376466363433363730333861643562353638326563
63376634646337353332333431366333343730396330333532393538373138393463353432333865 38613334623930666264303937643230653132646135313034616431346635313364663039616338
63346139303563393361643465616666313765396239303636343334653237373835313161396532 33656130393438316365333335646163313538613666663763343432333931353964616566303938
62346438303138333266393638303365633462373433323861353136613239303136623566393031 34353234363636363337383932373061373864653132343638643266363265383062643236323735
35396263366334653663663735366563393665343233623536376537636330356266316465303830 34623064383333323063326432623337343565663162663836616336643236663165613862626438
38643866636631666538306463323039346565376361623837396232326433386431346262653166 65633964323837663036643066663930393732623565366236346236383363346562323964646534
61346336323864656166393730646632666539313366626163353965353763326166373234633066 65376638356261363561353762626264663261643261323635333062376464633963303538646465
31633037613162643764303939363865623563346534373839346535336137336331326165626161 34613332613234386636613035313632633736323062633838313038613532356565646532633738
64323030383234303431373130313732613936363831303833376633663437336333663764663964 64633138326332633531336232303539633636396239376366393030613032383831633063643463
30356136653838656561373234393538373539393430643264626138303266396364363236373534 39613835346137653339323866626133306230653730343133623634343963373437313435316439
34653361646663336530363632303930383233323035653466343863633633626364663434323064 36626264653536613663396237613766643834386439376263303232343333653662656663646430
39663461363863373030623831313939323264343365313934333633333562636233626537383532 39316662326665396465336661626233396235383634333933656432313332663138353364616234
64326664623032323530313633353338323636646231383036373534323935356462366333323063 64643263656361636230326436326161373961346161393336373733343764333132633336333337
33343131396637313661363438623036353762633235356337643431303763636233343361376535 61666139646238636461343333356563613139383236306132653432363539656237303664386262
38393131623331636632313335313030353737663864636265373138313162353165633065656532 66303362376538623363653632313134653835376464396365316663643563363462643163326163
62373735313633666634306335396566623862646333666262333965323133336130393364623331 38393831376564623231636332643861613763623238376464343931383766323666386263623930
65393233363937656566393739663064326530653236313536356333353630346637626266386535 39373036346233366432616530646335393031316133303535363964313937306532636661386562
34386532363235396337623333323165643366333532323235383135353863323061396430636566 39333331653735666537363637346166383438633039643165386563356337313034383836363561
62376664306336303431323234643938393537353965616465316534303764626662343662316435 66623461373931616264623739386566653162353738346565383461343465313237623933666261
34303765373732323566383565333433303165326435393835336364666562623331666236336333 61373666623061313639326135646566333162626566396435633531633866336461666561646562
34326233656461386237623431626164633266313232616339663937613635373261303932393838 63373136336238633730393766353433643034306463613731393331383530313839333561323832
31653838616665613665326165383262656561386330366664313937633763646164323166346435 32386539303363336435326234383138616166363762336632363231393862643432626266623431
64643565383564656232623361306566356237386164306163636437373964376262313435336663 33333231626163363438643339303631633065333835623863366263343730396564636436613866
33363166636261616332653630393132386630313262343363383466643638303231633265336636 34663530363865636431643137663665613036316532363936383535343463313437333862356561
37383065633962383733653461613330363333306137646334346662353763663865353030636236 36656135653232643363643865386631363966356638356634393933623030313735313064653333
38386335663066616635646432656435366537656361313164323737653165663730383532643963 35333436646132616666313265333965373262626531643034373165653533396661663338343235
37393634306462376239346261646638646363386232336339633039306331343938 65353839353264373362366432313138336635386562373538366438303166393133323736646539
36343364656663316331363561313037326366333336376463356561383332383961383637366661
62333661393164326363386236313237663666666532653566306331663538643562363539346532
61643465666434343930326666663938333934346536613462616466633863643934336664616137
62643366333139666335346634333934353832333031656431346561313131623836333639663733
30306332626462393231613761323062373831376265613635343033303862633764633931373861
34306239646538333366353238353961313532353862646564323238363939623132393062616134
32303233666638663735633435396137356466623464633837393161383563626336616239346166
61613431383163396563633730666163323262303733333937323461656663393165623863633631
61303532323237383030303738663633356631306238343539363134346362646532373634636264
38343333313438613434376564303433616635313464663061643933636264363238373563663164
66306236343738653964646439623038623963346336306438333231666464366266376163616636
31613562636232396437356230383164663433386666613265393864336464653539313330363466
34616637353665343361643938663836613664343264636564393930366431383634636130653537
373930383731336539336361363133366566