diff --git a/inventory.yml b/inventory.yml
index f7c3172..81076e7 100644
--- a/inventory.yml
+++ b/inventory.yml
@@ -1,680 +1,649 @@
$ANSIBLE_VAULT;1.1;AES256
-31313364396663636163346533353463616663623038636364623761663537336162393732616665
-3434333865326134343164643636626433613131356139610a303039373364643263376337303135
-36626232643937326635393562653937383530653262313634633132643666666465393735303935
-6431386665313938320a376163373263333833396234613837646431633536363863303837316139
-63393639323933633665306664333339613462653135303934623233326661633666306164326635
-64383533326335386232343864383439326463653733663836303038353036653032303661396635
-32656664663336343264666432383164386530663636326138633166343365616135336561656237
-66333736313166326532633331303237646231383863373536636439333235643531633961376233
-63333833333861363130386537363836623361386134633633383534353330303163326439393466
-30393663623061343561373834363038333066393163316136373636373061353932396464636330
-34373364326333353530366231303833373061363930373336316635623566613033326632303833
-66666231653734646336363330633537383633633333376466663539353561383735353830383738
-34663332366239633738643437306539633835396131396461386364376233656561346264653330
-30373339663364323236376637383938663266346530363965613462306530623166386435663833
-37343833323538353933333532643937613363373031646238343365336161393432333065643235
-64366638643562653862366263353238633430613330393137383764663263356439666565326265
-33373534356233393630636337353734323039363835303834326438303432323731346665383139
-31653538666362636232343136323661363138613933326561633033653462633132643435646338
-33626661653031633634303938646436656565346163636665636532383632313766323139303936
-63356130363366626630386161643566363536656530316131303663663735643434376135333236
-64623164663365326563323961323134643761616435376338663539393666336662316661663565
-30313731623635353135653434303832343034333538656537663663353263396231643533366634
-62656663376564646630366332386434613934663938646139353133666436666538343162306337
-61346462313762306563373736373838303562353330663734646136663435373938336533613262
-34373432366364333833303437643063663963363031313830343333393738393336343863633432
-36643030376164616564323161666136323064316665313662346439303533396639643539623432
-39303139373463313730613461333361366266363533373238356336333961313239303336303639
-33303637333363646331353265326265373838356361383730633938633535613832356163333534
-62343936306366313265356339353361303364383863373935663437653565323335323765306634
-35613361333235346162306461643033613866613561626363613131643434613838313237376339
-62316335633735663961363830633130306365346431626534356564366532356531323933383663
-66393136616230376439643335636166373439663264383738396632366537353466363861643463
-36663735666138643362633836663933616665386638626538373533663839666533356437316266
-66323162356135636361626131623865653434633666643934613335373463393962353737386438
-64636266306464383730336334373433643631333466393965343861343638306431646362313531
-34623933313839313930326135383230633932353933623633343436333733646136646330393235
-38623034653262393231633534343231626630643730363864633464653465656235363731343138
-35376563373730663639313832383831646665326332376134666135366438383765376234653336
-64343431393961623331333164626333303338653461366534306664646665313630356164306566
-37613633373235623335643137313139623131616262353230343135386434333363313830636632
-31363762663333373734643765363366613638356132313763333538333136363537393531383937
-63653731353133646235353337663562326162326464613961383862363461353863393665373531
-64303161323266643636393337313363616536326536336135396533633062656361323265616438
-39386563376530343330633135653037336133306635633564356137333864646262623636396337
-35303731363337626635306234613333383065313962326439643834373863383133646337313532
-35623237333663613833306236613564393061303864626331366363653132336635623031393838
-38653439326464313863303538376536636235666630646232656365363838643538643166643035
-30656437343434666335393839626565303434383462313033343430643531303933646561326439
-64653734383236613139643061316333323363653930363236633038373931636334326436393931
-37353536653462386361626330643236333330626363643466333838323836666237633462653265
-36656262326166306463316332643538646365333865373165633330313461333666316530626138
-66646136346530313662346331373962343663656363633437613564653031383337393839313833
-30666532373865643639356364643636323964303436343735646666363237306630323439636164
-33306136303732306537353436636239623437333664323039393030666537663136653032323036
-38613763653834303062323365373130626663613862333764353234646136353033663664623265
-30643737386465386631666539646366313065326237343430663734313066373731633237353266
-65346666323734613039373163316566313839323135396662373839393764653832613866326464
-31316332613137313765326631346433313331343561393732333238386533303666633133376538
-65386262623433343034333737333364336261373361353934376236333334336631373930663334
-61363230326662356131613737626261646539326431326437643235333863656261316436643533
-30663364306163386431366263653362353531653564613763393164323061653261633165303433
-39383931363130376334343462373566333133386433396261616662336263653364653432373265
-34343936613061393062363933636264656464313738393566656162303534336537373265356130
-33626237353835383666646130613138313431393630623036383635393930613135623430633737
-35383138646363336437333534633464333733643132626130393532643662313762343532316330
-36353664383966373034656365366162623430386162356162383235396137386239383265616539
-34333835636631303938323132636130353035653834313738353931663630613332616364336438
-63643961666562383864396437383530386235623537333762346234333962396464353335643563
-61663164623035636639343939636565646565386364333737653734383133623738313563373935
-63613530656137356439343763656136343462616139346336373632323036323664306637343366
-33383137613235363465646430656230643131666637376331646262633434656235313535363234
-34613130336432353535373036333931643765336534313135366238316431326462643166623337
-32396135396566323963303937346530303535383136316666363466663266663331326631396461
-33313064326532303638366263343936666433353235633436356562336333373332356235643031
-32353136333434626234646638616436383930653961643962393165643066633137656131316139
-35353432343164303964316638306664386336356263666535663937323666343434306338653364
-30636663643339373833366166336331316235363236313837343864643864656665303765303462
-30383332363535636338636231376136373364346263363430653733353664326262336166653363
-30353335666337613762393431623262336433326563313361343133383930386365643365653361
-33643961623636633833643064626263363634656330633136383165393539313139353838663263
-36663530383434623263316136616464393033383137323163303135333539306338393163353832
-61316162643132363534386563376432623564333732643739393733623061303436353731376365
-32393362323037383035353265356530353661333863386533623834346332663935396238613639
-36636537373432646162626234353036383863343264333036346362316536653331646133363330
-63363432313463653362666263626366643938323766393764323831636336333965623330623232
-64646333383461376465373563313361316431666566316235306434663234633261303562613765
-34663064373432336362626331353438663235306335396237663639336361316634306362376463
-38346363313439376361386530343833666532323562306663666434323565326430633834663530
-64376432386164376538653535643961653431326439643264353236323839323637333662346431
-61323731353139346664396635633436616332636536656530333939373663386334306364666465
-39633364343036356431336637663035326261613331346430366331396361376236306530343739
-33666337313538323733303438663133323663393035646638666135343964633730333031346334
-64643161393236333533663737363538303961386265373365343434396133633638326665393065
-38383062353533373861626239383935333064326638373832333332656138646133323839326435
-63373463636364363130616638663136356465356661326637343336333331333266653762393431
-37666166343330383535633032333962393362643831613666383662306561336338646465653633
-39303239633435326663623932396437623061653530343530663239366232663166343265363662
-62326333363037363266613164396133306537326633303938666432636235336136343965633138
-38346332646639653063623339346234373664656362643731393732613239663135623134656661
-31306136323030323737316634643835323033646637323266326333613063653865356163656138
-33383561323432626665356562623731656230313565643664323963373533376661326238663865
-63643434646133643663303864353132333530616234656537656233363635346234353064306533
-37653861316463303834353134656636356564366565313939663735643666336263376634633662
-36636335646532326330336261356362333461346339303433393030383565313164656634626133
-35353632616664633432666532633934623931323535643763346164383537636132376365323262
-66336539303334613261353733653461376433636633343063346363326565313132346566333638
-36653862633339303636646430386562666639383638336137346463656563613863653863363033
-32643239373832376335383235656333333931383261666135373564633037373764333231663432
-62636165393837393936336466393234343639383138353231383731373838353737346136613164
-36316261306430386234656266643531613832353036633032333431316434633538353139393765
-62636231646361313464373463306434636566663163383531623735346136636134333339646261
-61333564383536373165383463363461343166366139616331653234626166643636643633656662
-30383965613637376532643439373365383039396530306634653061363865373737323239386431
-61636135643564363936313135373466373361666463623333363739633739323061663237303365
-64313633396334303735333132343563323036303936663130643232386265363166303562373665
-32333464316439663737313438653537623065616336373865333362383662363033656563313632
-65373937613038376634353061313762323266356530656463303339356335363666326164666439
-64373037666532303334323262323834346266396431363264323536616531383561373338336466
-63616135663233356234386333333761626135666130303933313234396535326530626230326138
-64373139363339346334383330663565636336373964613733316235613761326132346464393831
-31653236633036653839373338653332323163613463633362656139343233663633393836613131
-62616531353333373764636232633230346265633461636135323832643661303730623437656633
-36333665323765386265336664373966643336393033363234306139343339353066373164306539
-36326638313464366561353261313466666334656231363466633666613862303635393566356364
-61613463626130393361636363333630313836623238326534373733663734383632383738613163
-39646237663132363064636536363834373565316433383362376338303963386532386365373638
-31633766343166303031316465343638373866396436393838613166613166373166616463336439
-33383062346562386465303534616463396635353235623236393835626236626236376366626366
-35363732633538303966623137666461333434343938383562396235353162383036643637356136
-37363134323639633961356466343162353433303438633531616465323938636130396137653130
-31346232636537316363316161363531633537313034333637393364303961623534303131666130
-37656638323265383135646465346331633036393134666136336633343064646364643930306163
-35626635623265303263346230333938646131366336366536353534623963663030303838303036
-35306165613335326134353030633036323936356237376631623566323738656139336466663831
-62633731323362323333356463326262613739373863626532616564666262636164613031396531
-33643834313637303034643232386139303563366261323762363331376363613434616239656566
-35343635666233336563646137303265383938623864333062343662383766653164633037373031
-34326234333830343630346666316337383837623865653931383436303436346139343831396139
-33303937313432656130353439623166313437373164336339353339393639303234313033303233
-63343537363164363164636561356635636332306562373063383136666265396334633964353262
-32313137366161303032306434343438363034306630646437353036303731656238383335303737
-34366435366462643333323436333037393637613962363766353361313066363630323932346162
-36396566326265363365376332383161653232343337623131633538393664393234646563356537
-65303163313062643233663631396165613038353733363362626631396232326437366664393639
-64303635393862376532383438636362353661306165646465613837323939386434353466383061
-35303065666336393936653531323939633464333033323863613031326563343335656164373264
-61613932626262616363616337353163636335623633626265303564623436333965616362663438
-36303030363239613237393433646139373038636335646538643536386561633564633734636538
-63383835313432663433393133623365336461323861623361303062376363333630396266396363
-35636238313035333333663833373533336530393135393534616564653165623339313963303666
-64666134373239663032326266636431363931323633336133383264653362353666373930393265
-32613265663939623034373362303965616236653831383466393266653963633637303433623364
-66353933323235326636383434323664663662653665623762303030373536646366323232333265
-35383765616136316139376230663330363639393038396465653966313931633430623662653830
-63626364306436613037613537386433366537363463336532623333636465623638616332383962
-37376631343961366539306361386337616364356534643963623766643265613364646462333336
-39613432373765303362653663623561363938326665346333383865303862623734353965376238
-34396335316266326639343536386430396361623938626565623236353664363736623635306139
-32333261383732656531306137363934393566643566333534363532343438633961373734343762
-31326139356364326264646336366332663831353632626636663661353561626566623936343431
-65636432373238343336356536316162643339323439366530636130373535633136303535623732
-31343035623336366237666565326636613138646561613233663738346332313730323334346336
-66353963613632636538626433393937373033643338303733633962643964383434346363666533
-63646466363431336137663438323532646437316161623934333563356165656234346663383032
-32633063653539333730646236616539623332396531653631383133636231363661653439363638
-33353632313565363731336266336362613035386138653437643131373066356439643732643964
-62313335306236373739633531313233373964333462623663383131323633623337666266323665
-33643666383839303366333561313566306139336564653361313265393331643731623265616165
-34376234396632626137373335383463366335396661326362363134376131333333373866633639
-64666130663163643536343965373166356261333330313030663664356435393035396562623531
-33613733323864336433373834353436633537326132313732616436623432656664373566613436
-39646566323335333536323636643765306366343633363236336535323632303433323664333634
-39643830366238303830323666386431323830616336396163663632333232396530353233636533
-32633764643064396463376363623638306133376664663966336636356263356235313936363436
-31363338633634393633386538336535633939323661643161393638346438393164393832653239
-31613031616564323361333934343437366364343661623966393637636438653536313032653030
-38323232393337323332636661663233653530373234643237333061343861336165646364343663
-38633263396562666433336162363336313464303666303934653034656231333030626536303763
-32633636663061666361313730353738353163323839323265316430333563646639343737633066
-37633337616563663637623133393338323033316139346265336634383164653361613835616561
-37383161316461383436653231343434666134636462393462313932653937323031313635376165
-65373939613235383866306138333033306134386636326562383230373539316661623436303335
-30323562633237326237393463613662623163316532646163646630353131626362306333396139
-39326334326233623165383135326132666266383664306433636630376165326566323239613835
-35346263353534616463383133386365633766303434383163343163613337613565643863323565
-63343031363962316136633166653761396666613633356365333133386137366264653039396231
-34393731633564393135306664643034306136343862363636643165373863393363643336636663
-62363164653730373738313965313737376364343064393565356439366539333335313837393936
-66373336333662386166663534663462396365616566636635626562336239613434326132386335
-61376366303633666532633835346161356134316266313735613739313562316536333135376632
-64313235313663393964386565633831616331313739656331313464393239376439363730643863
-61343938646634353135326334373663383738373733343439303964353765616663316238623430
-36366336376436366364626636363265363630303232363335666431306432373962376564363461
-37323233353131633136376632613439363466316661333666643762353036623164636437366232
-62363631643266646633643538316164346134366265333461346365636238626461306339306133
-61333130316561303032393134386530323038616238376663356235366431633164353830623530
-30393638613064363963383966373838313539663931633831396331383036656565373437303431
-34306165663566346261356635653663356132646165396464326231653630613234366139376132
-34353765613032333339643265313134643461646664663436633135383332306262343862396165
-61613665363930656438633835313264303361393535386533356230323131313963373363656531
-62373538663435616338343838333166313161373837323535383239633063303835393736323666
-32316364383830326437393133663064316438333062633438656561373330376232333232323232
-63396634393132306665663361313937306433653562646561653537653934353366323133303833
-33663765626533376331333634306433356636313337356138656463646638333563346635336536
-64316166353264353834666537663661336165383032366235623665326664313737396464363836
-61653362363436303361386136393562626434626165336362383764393234323138323832653761
-31623166376261613464313565663738366230346564656236633865663831383034666666376132
-30363437623263303366656565353665646265393331396433616461623536623564633336363638
-65343265636533333339356630316366343634663533623430633563313130653163363663373565
-34366237623833363863303837336565396461646634366136303465343130386436373033343834
-32323762393961663761303538666439323264363231663263653665393635376362326336623565
-66613862626436306466333564356331386364323134333230633936376131623034653432363761
-66343530316335386233353537343431363336386138353838633837626436653966386361393763
-66636666623037643036313034633537646466313930373230346134663032323434386565306131
-35393463666536663364396166393534323761386130383066663833373961313237336564306630
-34363939363431303366646230653435303437313636373466353930646565316336376264306165
-39663461343634373638656431656232363266383334653664616561396637666339386337356131
-31356333316363333336353963356633636162646462313131306132383138303733313032643466
-35316665343231643733363232306336373033383663633334346162336636633162346535616536
-32363735633963363037323439316266323535643832383335343131616431663561623736356637
-39663465373132633363623565363235653833383532356339616266653661333264316435323962
-65633462356438616161353436353831613332303233663335343538316266303433343537306130
-66613263373337646563353566616438656566303332396230306265623239353134656534376639
-31643064386131633430316262663431646661663963643736373965303032346563396566666465
-62336538313035626263666332386330356230633834306337346131306235663863376239326438
-33383137623265396432653134363161383031663062306462346433346135653566633862323437
-38663430346239303732623635353738303864623634663163393166666439396135356631333961
-37306431353836386138663334303235313731393131653262613936653936363739373637646230
-37343434393639343862363836633739326164643932666432613764373635393465383630303462
-63353631343338366133663432643637313366653765663439306162643966643365326566346561
-63306331386133393634303035393663613761333462363832323866336465316533323832613236
-66353934646136373438333463373638393561343130336138633731303161376139376232323439
-30396337613163663535396531633539393765316439323734353533303036303861326335343764
-66393333386465313038343536663437376138663035333061646261366266333134343863633636
-64366538333436396135653237313766633631386531336135623331653265383462376463313263
-36613335396661613236366632306637303434396136386633666132373061326134346232343132
-61353530663965373961663137353465646265356534313336383930666364623361636332373139
-39623933323835363537353839396538303238343633393863393832393464356364336466366536
-65616366343234316663346362363639303136313438643432646631343166333262633533636538
-65386164666366616662663234363239396462663666643534643365633962633139343037303766
-62663162653062373835613564366161343030333363626538663134313366356366373863343531
-64366430353038656464326561383439303564616531363265313231653866343838393432383563
-32313238666261393263653864643034643233653362303866613737616462313635666439306334
-31393263386439653434303962386633386463316231613261333837643539643461363761373261
-65313262623865623639636338666434616632363765646133303031666364646461326330383934
-33363837653962626135373730626162336365303665636131313564306532343062396435383932
-62633037363166656234303363396531653032616264346631353737636164303461316230613536
-65663934636131383839366565663130386333643465666366343831643562336234646430343565
-39363865326535383466643239353835366131306234383034626666316631366638393834633662
-65336632613636323737316165303937323734666365303635353665656636323336616662343466
-34316664366232663437333336656532323166346363386338323664666233363264316661666365
-32393861383834336631353365313832363330623364396562343564613862393538623131613339
-63303563383532306163376637626531646630333630643534303431306439356538353231313635
-32376563396332333136626533373231316661313836376532643039386237373066633263636531
-63356634646664303762343537303564343363363864336461633566333638303635376561363937
-64316265623439396661623862393639326631346366363561336561643161303966376135306631
-66323163363834373530363134393464663866303330623530383839613566376162613738363433
-32633633626137363234613061306137356237393566356264396366666566383231613332306237
-33343861646361373634656563666531396137363531636230343936653462383632363732643130
-35376532316135306464636261636462656464363061636165333835346538303564623631303539
-35373437396635363337356531316138353961343134303336653038306132613032373263636665
-33613931363066326230366564353339396336656239366539373737376134616362663963366264
-36343266326239343836343136626130376663353930653132646366343032613231643839626163
-38313938626535353735383939626666646439616138333465616239346361373437626139383166
-31323033636136376537373661643965343033363861643065303330313864363235316134366436
-61383930333531633130623033353532616131643935306635663962313633383932633430646238
-64653266313335613731373137613332643436386236333236666561313965386432303731656238
-34346662326437313333313939303533333339386135653161363366336335313261323136313539
-30313333326165326637376666373835626531633964626361383336623066363066313934636438
-64333462376637623130316363633133643337646266363736363839383633303365366334363436
-61313765343433666238333363386434373539393539326662383261663834363337666334373466
-38336461303763656562343133353139633033656130376266306538626334366564646332323333
-30373136373137353765336138393138306331643539346463393162363134353963366434333734
-61303062303032663661616465376461663832626335393465376130373466353636303033383733
-62303735383964363230333661356237383937616634633166663538323363633535323634616532
-36313337663663383938643331616639613732633630323037383339396332623231313531333331
-32343037653030663661366533333536336633373563383536656235316162663537323733636263
-32663939396463613732616565346166633238653838336365373838663637323439306236376535
-31626636656632346664613464373636333233656535346635353362363237626231303537306331
-37353365393534643730323937373636333135336539623262396661393530353330366564373662
-38333162313965653833313336656431326635333765626632653633663963333439343038323062
-31343939663161613338633036323836653436336532376266383230653137636432393761613335
-66356664373830613934666266333131393436623165373938323265656564306462663037303630
-36653433616233386535366531353733643130346265626433653563353565653565313166343466
-65633463623062373934383065366334663634633561343866386530373461636232313661323361
-61333263643433373834306164653832383337363236383363383137333232613862663761316239
-35363236363031323636623739646331333435306235323365323866366538646261613461336233
-64373936363463303662316535303066363864616435383461363164636639343965363132323561
-61613566316432326266633131653534386565343332303061323033643933316437643939376530
-36366431353432633834313964616264636536383632386330356335323733663166373334386164
-37653466393865666563346332633739643063636538323761323139363663323734323738343533
-62343362306432656237343836383530303630636230383665366532303136666635323565306364
-35646561393462663565343362376136646634373530393936373633653137616163663666363537
-64363465346564303965333561396536653234303632633766353362323030653334326230316465
-30353434356138623439356432303131623131633763396337363530623463636133356639656535
-33613264303439653164373430356536656331393161386534343635656534663862326564306561
-39343865393562363561306533616231666330616166306166303163353766393033323663633961
-62323864373636613139613835396138623163393466396136303437613738666638643335343935
-35663234333630613861383532613830663335653534623537623139656562326435373632366637
-39373638653665323137666361613030616132313039353535363330633264653439313432656236
-37343965353033363432613961623063363436386433383663353062626432373534626366393633
-34383535356365643430353563663864366464666430656339363030333431633133336265303332
-39343865323338356563613530656638383537386633653530396638393365613435666333393938
-63393961646632336566306437323236623730323737333536376531633462613263343565336136
-37356534326334313634636362343439663965336166383832326331396330343531616433643732
-65396336623163343037393234373038613932666265306130643064393864373166353339333164
-62623962653333613137363635336133613431303738333764383661363964343366303638396230
-33383237366161376634613836386239653036643766663466636333623861336464333133323364
-34663535393361376564396665323966343963343137613339626639666433316433656362383735
-33393862396362626138373637353761623939393736363133323734376232653232393864623865
-31396439623264653362326536356131393332646361333364396665363838316139363939353433
-39393031396565373637646236313531386632646665356565633034613832306130363635323639
-64633439373637623064366436663238633138653539376238663834636565313564363562646639
-37616137373437633031386137323361313638663330663561303533616537326631633232623538
-33393333353733376130366235616134623431326361363837386164336465373161663234623939
-33303834313238366434393835306232613963316666396136343735636238396433336261336363
-32366332383666663234393632303461383436383863646535616265616234376137656265646537
-34323164323662323638623031643036376533316364333835303337353461636636366134333763
-36613232396265626530363963333335623366343232663031663632646633386364393832353062
-62616431653435393762353433356337323939373536323239393566393234326537656466343335
-38366661373937626632616635656134386136336663633331336239303439343265336164313139
-35363965356235303664316332326236376536363932663562666430613563326564353530616233
-66376139626633366332356538356434393063383766623066653031353866393065303836616663
-66626636376331626138333965356436613839613037623863393336636533353037646632386461
-37363761366338633637656131333631376562393064346536653135313932623933623066303537
-64643937376163386565353637313966663461306161656433393135333861323035313235306431
-34303064653336656231613030323736346438636561383237396266373563653765336164376465
-33663838616663646433303664383036663361363333363064623131666331633031356636653031
-64643963626638303132333937643433646439386635643238643439393239653637656562373163
-39653432356162613566336434643238363938383039303165346237376630623766343165366162
-39346564616439613365623937303638666266626434656662376465656463643261356636356232
-37366430363339633939643539363934653336643266663537613336333137353731646635643330
-37363933363664656336613164623265316437316332333366663338303665383135366163396237
-39313634353630356161636536376132303933363437653161303833353963363432393730363935
-61353038386339336639326437353366313230333339393831303062333533623039306631346262
-36353632626364613464373363313465353932633562616335343133393362613836396634346630
-64666535346130343937633830306130313462323734316238386362363636376264643235353632
-64663662303532646331653061633333393539656331633236623235613434363662333435616234
-37386532633234646539633638343061336566613161373936636265316235636165653362353764
-33343039386136666335396635303139343138316233656139666437343336323838353637636265
-39636431353336643335616664323637626539326636356531373036633866333831393261653032
-30663234646330353362316531613364663733333237316161323534656365656231393230613639
-63366335353066646462303264373562363666396632373364653231323366383731656330643563
-37616435366364613133373664616239316435353031343939653462666539373639326162623730
-61333863623237316430666365363363656332303466303638633865303264653237376365313735
-39656531306538353361383136323666326232623838326264363939663837376632353236656164
-37326462303333326466393831383063316630356133396465613533373436376138343263376132
-66303436366538353965636465323363353831363838393136346435353939323831376539323436
-31386632633963383834366433663838376333386265623232376264653862653762363435393464
-37323033313861363738663331663462343032623035633536316235306566366133336163313639
-34393533646530623532343763306239363635303665373837313433356365633163646661656531
-62643035366262653534356139323238333637323761623636646131613938396634383465353437
-33336365363465386234633430333535373333363338333061396463313463396238643064313533
-36343564633265323530383930646433376439633335323836616266633066656130646632346338
-63626535376339373564656534643565623463663632643533333565623033363861626337336230
-37616465623538326665613865366264316363363435326636396366313465663361626236636266
-30303937376133653930383133656135326434653033373862346239666365393666356339646163
-34333636653765643833306630326533386436303632303861366161323062373530613763633439
-64393966636533303831396165613439666130373664323035666132333731643533636431353566
-38393766363766396631643834326534626338303163376431616334616461393135323135316630
-63343630363930383933363238663836653363363237663931323835326535323461636632326465
-33646138373430363361333730316430316339366131613430656363383935616661376465656430
-30653262366634346666616633306666396166343437666664626537616431636139643161393162
-65666435386333306634613436336337666164646261613831353830666662356265386661386439
-64393238653435313337363661366331386331386435643164633264373161656338626131666334
-38376535333230306633333532303862383633656364613135333233643638643830313565643133
-38323831323861623164353434393466346339303530653263386233343131623365356165346637
-37343233383138383066653365333538313233316430313332313864356531656466373737396162
-34373134636536396366663836393962303034656162333336666637373030623961316631326337
-63386433623933313135646438623339653437613232373961356262663934343064363566616363
-30326637376438666335323531343532383530623763363930313332323532383837333566663130
-36393763343966653766313631616432353165663730316166383931376462336636643762373533
-37373463646536366532646465656535316164333032343134356632613237303435336463363031
-37643764643034356430323938373966636361623632633333636335323335326662373538303838
-30373233383831373833643963636236363766643164346632643333323062613964373966386636
-38623934383733366331616166336461383230356563303431333561303132373363376266383330
-65653931316635303166646238613137363339633734386266643065643263623463656634316439
-65396330663732366465376166323566643636366165613630346636613064663534393835396631
-61613465313333623931353065373732393766396461306432663833396537363732353663613464
-39383665626635613438646631313661393931303263353034323534633565333136326438343834
-63663638363437646638663835613232616335313133386630336162343333303737356337303733
-32323932356433383761646539313936396165326536326663613235613937366661336233376463
-30656133393163306438323635323830323532316162393564646333373534616262633135373136
-30343633373533313831626137313436656134333234396136306465666234613036343164653239
-63623830323338623336373435366534343630373432353030396365306131353462383631393463
-61643132346463383235663662623266656534313434666631333766613234313337343436613338
-37373266303637363933376638316135343833303632336630353638306537636261626466373732
-33663738363935356331303733343939376235343766653237613531373662623366333136336333
-33616237623862316164306232363931353438336135336564636239363238623739636361353030
-34653234376133313037373532666437313539333866303432356163363837633462626266633837
-37303433336432656362653131356230356330633732386130623031346666383839383036623339
-34353035323662383839376130626338366539643532333037636563313532363562633238373564
-64366163373934396366656338643039323033383932393232333262393365363065323735353465
-36316632363930626337346565656531366134666465316239363564363565373766626566326263
-61386461316439623536383136333238643163346238373532363730306438636565376133653361
-64616432376564316435353837373835653730663363366631646133326132333961316336626132
-35346537303434633664336234626161616236653130633239653631636133353032336630626265
-39393766613432633035383533303735396634633336396664616266373966656137616365663063
-30633938653031356638373132306562313165663538613439393465316537343635333434333734
-37646561366164633464346465373063303262663330366136616565356430333239363862613563
-65633234383431393936373637386165623864333263646237663336313161646536366237666633
-62396437636435643338613930623135353663303634373036363730626262383231613665303961
-66666531333831303964636337373638336136656164363336373661326438353163316238313636
-63303363623864643538653433623333386362643839623462336239643533636135393232393936
-30303630383533643461393166636138376531616262656631323639616437313164396663306436
-38386533333666666338316662623033616331373763393966313062623866316438666437663365
-39663736656365633838313433303564653664356134376430636436363835303364383134653535
-62343138333631653561323130376635313539653239366130396262303264386531333465613065
-65653262336366613139616364626232313166636665633266346662643337363862363431616334
-36353431316431366437326537633161313761346532643865353663383763336462393438323762
-35323462666130613661393463643838356133643264303234353866343830393130306232653862
-33333066363236613339616333653964303562396430643637396430373532653463613665333032
-65303364353733626430353661383634313638633565333535643262333663343132393464653030
-61663164366535346666626330366430663363363631663265636637313431613635376666613038
-65623863393734626538646362616361323630323566663531633535363334346434313132386564
-39613763316563613639353162303637643939303539643934656532366336616330656461353336
-61336233396630656431363262623536393332616664386530353037323461346630613338646635
-38336362616433656362656236356638666136333231663766316534623061643135353132666236
-61346466636237316439306434343937363230636538306466646566623363376134326630323037
-33336561616134366437373430383762323065343638653535323764666461396139353462333732
-36383232376531396566616236393562393461383566366336323831393163623738386566373364
-33383563643566643737636535653861363532316161373730656633323032653535386238386362
-65653633313331656135646637323762633732353532623735643833633633313865623135316637
-65613565616338313563666363333463323761336337656537376532653466356232313937313964
-64316138386632613738306261613233373234306435623131643533646161656431626438663936
-63393561643235626439343062653761376336363235343032393030643166313066333562363962
-63373562656636353031636136376366396337353463633433326165326530323562363432356363
-35333732343335373534373230613935313862623233653632353066656363656232653662623830
-62623238613838666366316463656134613634623365353463306365396231653761653432353731
-63333739383931383162343761323463396638633231396333316536666536626131313266356233
-62306234623334393333323736363838376632356663353164393362613832643234393265313537
-33383164613537613665633866303735323436626564636139356664663463326332326166383033
-37366364633163366234626434653634616532643766646134633532646263316561356566306230
-63323138653032663138346432333338633763353164653961383162626330633334386263363465
-32323237366537376665633863346430346333643363376264323835306161653437663138643336
-31306263336330626433343733333931343231343662333937363038373561303965383736646564
-62663438643339663831623030346130306233623938363737336663333036396638383563393037
-65306266616438613034313932336536396564616162383566643531613237616539613632363463
-66333163346566663439663262613934623133643163313639363335303462656463613564643464
-61626639306231653534343334323732653936623839323565656137666338303338326338346537
-66326236613662663731353366623862653063303130663034346137323564343836666537343930
-63366239613862626134323837376638326234643634353436383461313732383636303764353135
-37326232653136663335643061663139356461313930383762333538636232623730316362383966
-34623465323834333431656539663763346662613764393139653533303864373336336262653436
-37363433666462323138323063306162666135343766623562373565623664353163356333636430
-66623937326633363465643737653435393439666235393166366533313835316662663461373164
-36646662383661333039626533376130343039306231643465333737336163373365653231613838
-32346666613736383632343566313130363236303739363635393462663934666163356633616162
-62313666303637653137633461346439666363636631326462353930373231316163613537383165
-30626332366563386437346338353330383830303834613762373938663831333434633937663936
-30616634643030313664306533633038393331336630666435303330373932626138313330303135
-63396330656530306133633764653638663761326363663865376330356131623035386239623236
-39396265303637363135623365306434323739316661393435373731306438633665333864666131
-34643235396463386662643837623964623332663634303430386662393262643735396334656366
-33653230356365613865353932393963326262323365656561363338336632323837306432633135
-65313062643536616236636565383063353662336638366530313633616538363061386663386435
-62323631626463323564353939643664373534316363646465633438313464383061653831363364
-32623865303637323433666665643662393438383231336335373237303638333130316231666139
-31366137663766383237623465363734333739376232653863373539663337623633393434303765
-38653638336563336661626338303863636263393833363062363232306661343738303264633465
-66333531303432376463323466366638613864323439613136323866626433383262303234376331
-30613838643565313861626235626534373831663566623364313837383631346265353562383964
-30386565646537383933626432303762356530353862656461363030366639313333353336363835
-38613637383633633733626638383933616566616534383466393735376565306438333461626162
-36663133363439383862623838636230653236376537633863383564393964633236306637336465
-30373034663831343033363464636464373633366539646531633062303663353131636465313332
-66623665376534366134353330666566656438613439656636323564613564663063313331356133
-35666339633264613236303737373232666333386535313638326232306434356263396535303062
-62306230336531323435363638663261353264366363393731313038613661356264336166643135
-63306366353463353934623039643037393966383731306430623362663038376565633231636166
-66393262616635396138333561303038323633663834386261393966663533313834376535353333
-36386664633932363238663766653237303432383330353763373332313237613831636532326230
-63323033663730393364633363386263333766653431623538323563353235326336373663623261
-64326335363364643135336533386430636139326337346437316436326231636532306338306161
-32633236613433636134653965326236653062363962613732306266323834306430303639326437
-31383439336664643939346165393936616339353437666534303434613365636566393435333665
-33333130383036396566613834316464616264633966396138306236333665333165633032356231
-66313030343530613232396562343864343637363035393939373936363936613934636666303464
-31333533623365396431393466336165656237366630653763336134363536363130323337383535
-32313938626433393835373939636435353633303636313733653133363261376334633764346130
-34333862633433613564316261313438656339613335373237316461666462356536353735383064
-32623233313862306365656365626232386439613262666563636466373830633436373832613863
-65656531366165353431613335323861643961376633356136666332656634326361366464636631
-64653161326633313630313431323635373831313938626638663330613562333863343235636366
-38653836366536373838653231646138643536353761383136653563373333633737363263646564
-62636266343237393766643965303561666463306334376665323531356430303261306435323466
-30623863326431313862623765373666336639616636396530656539616335363364323939393331
-64303339383565383330356130613932626234303732383731383539366237346436643138633730
-61666132353437383330656333353837663964313631303331356330356539356435653264666338
-63626662373962613836363237356230383939613434326635373333343234646663313965363730
-37393336326539633336666666626533623531343365363563356535653331616336313335323930
-33353034356337323838393864333530303366623032316665366261663638333966393337326561
-39333036313035356164313566306438316331336431666336663332643664643031643030343537
-36333364663331366465316634383030623165346237383336333236633062376232333939376237
-38313834616638313064366438666138356336636535613534313262383066363439343933383931
-65666638373938376133663839313064383966323262626330633665313462656366373563306565
-33623161623838326434666365656133613864356431323432653462346133326430366236333666
-34316462303164656164393465396133643061356364363135626534626565336339643637343334
-38646238613531636532356466326263393238373962623238346131343737653834356535653834
-33653266343730346134633831396361353334393764353733373636383631333838336331636636
-64383763303766396332303830363132633361646531343261383339346537613961326231383732
-32306631343739303431633639616162356461626466636336653035653332313831653364373839
-63393366616438366632373231363166336465323765613632393039363765366239363031626165
-36336461343665663964323738316133656530316663643831613331333133623231326661346236
-34663032613733376664323938303939626238373437383233326630333634383232303264313939
-63343665353435316238313736663735346237343864646334383039656362313761383832383162
-39643262626533653939626364613730616233613938626566363464633530623431613865336537
-62306532623061373135396639643736383536356133326230393239613937626463333831316431
-63666333393237313061396637343037336436613133343039656265363739636638393236306535
-31336430356538326136386633656138373637393833393631303838643736623631386261326161
-38366463643734326331663465326136663335386561396235393066333834646536326562663537
-66626132326635636430643561393134396435616565376134666565353038613637643165613935
-35363237366165613964653461323132323163623536393031363638353136326635633462376537
-34616137636162346266376237393064646461326234653763653637623630386661336561663066
-61333063626132353036633464643135646632306136656331643432666336646536653736386666
-38623661616435303439373230616336666537653262613234633730613331336166613434343238
-34653234323932343939653164386638393537303663633132383963666362653530613138343362
-33393331356338333634666463663932306432623361666534333065313764373537613963656331
-39363232343264343863393431323564653232343732363161643564663933653965336632653930
-63346531346235363732326435353038663361306539336632393330313030363562626666336562
-36303231656334316337386230633339613533636430613739393139643061393361313937356238
-66323933323934653636373239353162363034323334333030616562393832306635343166326534
-61343130633665616630633838623462396266303039623031313332363631643861313230366133
-32623766343363373034313732356565386637303331326133653966393738656535613064393061
-38363530636236376235376431303962336231383635393163383333653963326632343931616166
-32343666353966383964626561376362343265666133633161303131353438653939383536353232
-32323835386431326138373239393737396664333538333934343534376431623130656437316238
-36353131333966636665623139343636356436323038366132643265643835383263636264353934
-37356564313036663035613834333534303839323166666138636136316631376235646463656536
-31343033373839396564653966613734623265393133653932303362656534633461393238643131
-30323566633862626232363439613531376561643032353365623362393939323931376562663463
-33306530633639313738313662343636633931643736343664363362656466646535626533303766
-37373734356535303037393666666363626661376132363934633664343864353133356262366565
-37646163323835633965343932366165663831663035656437363235353535653165356631343937
-62626564323137333464313762333966353666663338396566336639333133383838353739373164
-64386665306164366137373265343165383036623761313339616364666232616536643837626338
-35656366306438343933663133306264323962653462336336323239633061663030653537666533
-31373733303763653139653432663636653837333964613538396661376235366264346663303534
-35396264313936656138373865356532613563316638666165643262316465616566323535623731
-33646163646330376230363165363239653464393632663062663536636463333563616462333534
-37613364306533386633613436643266343132376636336361393833376161353762366235336561
-33373165393733306162346535306566653935666533623237666131623735336162393334653662
-39633265376530376237396563363338373434356237323034356634363265666230326533336238
-35303634643339633436343838663461343834303939366263393938343461623136646661613466
-39353230616331376231303936613439343965643931623330353633323736376363353031316261
-31643535306534626362633436643137646232343464333562326334343639613634306262356264
-62396436666131326637626364626433396262663061356635613732623061303765633065376336
-37316363633034623838393635626161386162313165316564373662386333353831646439653764
-66346432333337393666346334613430623739313364356434616261343739393464376362373733
-34373938383561363833366337343162386635326135646532326333646133336630393663666532
-62666237656662336438303230323839353031396166396462356563326332343232323466616234
-36386135313564666430303262346364616261613566636230643736383532646436353066383930
-35396330666166663663313739626262643533623233623566646130656166663234656165626662
-66613530623365333033373338376135393231316462343933393233656162343665353661383562
-31303134386637643363646363323766643533313337316666343332393133343666306132366639
-66343464376633626164383866643030346135396435643130356330656335363137356361616339
-64303636616633633062613265336238323133653832346438363366323836386662313063313330
-33303065376131376363343839366131613231653331333262656464313737663030313531396464
-31373531393739623239336135353066383265653464643731303261323638393039313832313761
-63373864353935336262643133356333666563353339336163666338613264343233393066646138
-38613436393066376338633334373033363638366539633736396536653533643736333431316133
-37373035353330316361656166326138663031393563306461643533363736616365636435363632
-33323132306165373436643234666561623766376432323935343361666266343563333332633137
-36636337613566333663643831333935666565326166383138353064326631343135666331336435
-36653038636162323939393963316335653234616362613230653730633237613935663365386437
-30616232366538613161396339303636326437623031326435396366316363666338316635636132
-32643934303630313563306233643862376366326561393534613761643730383038613566306336
-62393335666363666233313437636365393935393364623264373534666465333337656638633438
-33616665303263326134356663356133303136343834623430383932353433653766616135396263
-66633535383436346265353966376261313432636339643439323630623835393765326434343437
-62336332616137353938633662376366623435326539316663623364333861653464373630633236
-65653133376665626337323265353438666338313238613563626562383964663237333962316237
-35666262306334633862623263646666386432613633613933343637616635643862363036373464
-32616564646662326166323330343562366630616232663630363231366634373037313066623866
-30653433353631333634373465313737363139363737316436643138383739306265643133393036
-38376563633235383764303931643936663137363339643336663039333335363565306263656462
-36333431306365663138653134663837656538386366343962303764383365663336653864613763
-30333734353364636464643835353261343964303166343031353065353761323061313962663062
-37323738633332633330333332333537373863373437353236666538323130326137626665336539
-30623963393166643030303837623462333266653833633664656130303563373862636633373938
-62653465343866363234366537353734333837306464396433373535366535386634333163303461
-63633630366164633162303238353137313731663833333038303235356638353336633539646161
-34636238363264653634393565376164643139396166333162326236313236306563323563626633
-38363836323739313666366133343865313433666234396433376230626631643539313662626538
-65326664613266643466613533313934336266303131636230316430386638373334386433356662
-62333738633933336366373835333939623133646633663063383131386163653332383364626664
-62333335343538383662353861626462353637633432376565623766353362663234633830323433
-37386236363830373261643662656639323665656235613465366131633462663433323035366264
-65666630393461393762656538623238656437666135306662353338343439366530383336346661
-63326365613334666266306533643036333336623261326135363039643966316361666562376461
-64656562393333343766303136366235663337303561326365316664653665363033366138366662
-38656238313364373561313539303933613463623261393839356265633937326435663239303662
-32356536366634363064323262336530393163383263633965353238343534353230306231626464
-31376336323864323461306462343766363765323537313938333665666539663735623161303866
-62343061346664323138333136643263353331343462313666306131333936383630386137383136
-66313430616137386539623739616531326137393966393066646463306638643330393964376563
-39306635333337323234346633353138663366646561353861633438666332646634373563366361
-61396139643061303962656637363961623163663565306536333963613033646133313564383333
-35653962666263336364346265616633636163616263393336623766316437666165323336656662
-64363561363336393936363538363966393039396333363132363938333432653235353637313134
-33303732343537636433336234663262616239616334363933616636316464343562633430323865
-33393566343038346436346330666164356165303039346333323761623731636138663862316434
-31313331386364343738643031303539353766386337383863623163616233323665363632316664
-33626531653732353632623032343161303337373135306236326365326361666535636436313934
-65306566326663346136646366616636623632383537323738383237343465386430313232316432
-30646535633332646639376464616266393131363962386237343663643738393365633331613465
-61663138363963643933323836383434623061326231626665333362353934366264653262386538
-31353433316138613038626638613133373663343864653565376433316333376436386262633639
-39633964373833306565333636633535336138373533663834353862326139333230636464323165
-64306564376137656130333239643132326537363932666335343730353331666464363931616536
-64306265356535623466326633643161666164326131343738383866623038643763636338643062
-30653263653338383962303139353337663039383434333033353966323537623632316630373437
-35313831313638613961393765313135346436393833383630346432363734336465336434303762
-64363564616630666230313463626532633730386339343832623735323334656330336663366466
-34363463623662353163333665336566643232636432646464353561613339303066666633633266
-38666438373962376263383065376266393930383838396533366432616263336431653038316533
-33346231386633623265396138666166333266653038386237326133366265653263363061643433
-61383962653135383939373934386539666162623163663737343539613061656630363636356331
-65323362373264393930643936306565333239653337663737646665353930306331336139653432
-34386431323438313165333831663062656464663162363565663438353964613835303536303937
-34343038333834616665373033386466383863376130656230363638316537626666373135633438
-39626130303937346165356666343733353631646533303431346231326563306461623031623930
-37633938633061666663376232306234336434363533626432303539363432386532306232336664
-32623037643265663465393864646163613436346165373037383665303966656565323664366436
-38323764626538663235383064653937346534393333623931616234396133373930656664653630
-36666165653930363966373631383931346437376164396438353139396232633734663564323735
-66366665396630373932343864396437353661373565646466316563383434336532373862633837
-37666433646333303439313933616261616634643739643463383466666332323962643331323637
-37653266646234363964663565356430336135313765626337383933366435616261333564376365
-36636462313432373663376265656330376636356232333831653964386463353336656563323235
-34656563323839643565623038643939333938313862666534386539653366316432326461326531
-61633437356530623462623362643739623565333165393432376238336463616339373966613933
-65666336613766383331323262306161616335613462333439303763376161373264623463306531
-33393131303932653861653838336439396633646465333332663637636162316662626632363731
-32373032346139616238326438663237383763343735316261333335353634303964323933333361
-61343263336165306235383562653734323664323133363733666630383561636637346238363038
-34626239323239663439363063323030386466613365383263623266643630356336383630336465
-33393539643566373762313036363436663137383865326231333631623734656535356331623239
-36306431313832363037666538626438623066363137376330323361656466316637336534363931
-62386334303039346561643561353662303139333564636463663461356166653336323334323033
-38636430343132383038636632616564386631313663656330343761646563383039666439373861
-33376138363633636135613030373961626362653436663537663663313266373031366266346634
-65353839663264643263343561306362323534306632316161366137643665393135306666343662
-39326638333161353462393837306332376338353137383262306164323332303061366339613961
-33356335323036373332343038646163316239343564363232663137646662666263393765663661
-61363330346466613634326539646135386433383433303339323536333435303631393239356339
-63336662333965376366353232633665346237663835333164393035333630653861343534656261
-35383665343564343132366661626463383236616231396265613531613862646164653435626433
-32363136383064396433636432396532623535313664316465663837626236356336326461636235
-31613731313032343634366234393736343836616538333731363734653131623664346634323535
-64333961633236313737393933626339303030313265316135323837613033616332626137323938
-35666332313430376637343336366236383330333865653565656230303036396637343630303834
-64346461316133666365386331303366323231376465393139376566666539656238623161353639
-62653233336132306134326232656233373133333834636138636531323138353430653762323034
-64653632356535313866343765376465363432376535363939356431363264353139313365663734
-64323732343536626232356264613136643661376363323361353731333235663431393663396334
-35663963363935346333643161316538646530356164346365663466353565373763613233386536
-34356666623135396431303765363138346437626439633432353633323837653132303066363861
-36363338393565333131343236323833646665353834643238653831323537663664633966356133
-66633837623461643362623337323931643338316438393765336538666434393930313663633665
-36376264316362386661333563366137666463376237323836373963613437633633363664343031
-32613963373931366163616436366339633939353534396464346232636164613138656664343230
-39316539663862636663643861343136333065326136663863333631653563336562666634646339
-61313537363530383935656233633535333634363838386630616561396539643061653036656339
-31633833623564313036353466333538633761363034353232653234306232336661316237643737
-63336633316562333130633838643034353264353331616566633935643234616565313734613063
-36633334306433623965636364653735313739313963326538646633326461386437303136373336
-61643934663364333838633466363466643037396563623734343839343436613537363663633235
-63303433316166336432613064663139363264633963616366316664356232623664333838306335
-37356534363764653439336532343363643065383366373934636262633835656232323530343933
-31666638356138333564636561363731353366306163633665613538386533613830666438663731
-33386464356665306263626162313965353433343832383464626265363261316537396236393661
-61326538326431343037363632616237646636303563623061393666623235323662653961626335
-33623362326538353636363531633839363364613837643731353961333963353836303830656339
-37643938653064633766373764316233396365343265643637373133633534393238346332643231
-66613337353662323663653066393165386663353634336137663039343933616436383432663064
-61656634313736633630346534333234656632396463383131663363303236333966313531333666
-39626438366430373038356136303162653530313031333962643538396363343830646434316531
-373163643837303136633832363963303664
+62386339393366643763383339373037363365316132633835363530353330653839303732353335
+6231343438366132343632383066386163336532373633330a626636643034633261373662313138
+37336632633465646638363763306436333566376133656237373731613539363530656266336339
+3339313039373766360a306631373166663330373233343762613631636432306333383265313639
+65656638306665313862316137383939393336303633646463316536646162323563383263623637
+39323134626333333661666636326636313263396663653864643262373733326535653764313065
+31656135313263313535386364623237376336616430303737306534333839326531383964636264
+36336164656636366431346434643536663361313634386233356132633133666237633037623439
+37356136383063356530336230373231623062306163646235633633623439346634636161623062
+30383438663361373938653630653562366436303235663963363631656630303165386465396632
+30313639633364633439346230666264363762646264396336663934346533353562636437316461
+39636665346565343437303032313761633536633266653866643235316464346533666536316664
+39346662373338356639613238626237353737363533396330653239373033393665663263353165
+36626265323266333337363365356538393933616266613965353662323263353832386264363337
+35656631656365366132303465306432366235363931386238633265656162396632656463316465
+66363734663233663866656263353631323762343665353535356561313237313036393138636163
+36386562333339373832383364373465323862616661343865646662626331646639646164313439
+30333239346136303432323035626135623937353862646562373336636134633034393837656164
+31373932323135353836646236316163343966643731343831333033386338393737303264626134
+63373862383732663462656639643335613232633839386434633832636534376133376432643638
+31353136313538376531613239373965303730323536393039633861393338323861306662313639
+36366636396364386136663865613564633566666262656538373637383133376333623934666262
+35373134633133383535353436613932333466383961313361333730303164353463633531356561
+34626335653335306435333364636235623862616266353961313138663032326338343665343035
+66393562373835656634326164643638623364333239613363333138303938616337623366346663
+37343662663239396666633038386636633963613934616461363664333631663663316531626266
+65636661306635333839393835363839383763343164616631666238373737666366323232346234
+32626630626564353433393463626566383331343365396336646239303462633665643439633538
+36383365356435626237663630353364396166653365653363663362663838376532666236316663
+31393565363962316632663463313063333331316564383031363939646361363837623037626630
+32393761353066316663316165666434313766653666653537326638353165346438663565323836
+62383434616266366336363537376166663261303834353531323835626463326132326432336338
+39316464373362646333663763663334363035393336366266356639393735373563616130343931
+36383862363162613161343836313737363663353763323831306561313931343835316565326661
+34383236626335316266646362333535626338303962363632373663653136383138336263393435
+34326638353762343132393537343166643630666433386538326634613862313831633361303732
+39363862306562313765303066663932636531343935383466363738373039306135646162613164
+39386464623439356635366666323433303235303866653962363932643964383432323064636334
+63356231623139663661353364666432323335613738346130343536343633396333373963636234
+33623734323966626532663030646362323765663661383364613734663066313363653566303965
+64313136336236346430663636656634653039626165613631636532323164323330333263646366
+65393337353136396533393961613738336366313138373432306263393362613735336137393763
+37623365616139613638623664333039346533646638353538346464633465663634373463653963
+31366632306437616435356339633561346237373833356565663139363534373037626566356339
+62363739653934636635386465353163346263353034343861656135336435393930663561396634
+38393335303633326330373066623135336530633032653537366631343961346639656539666231
+62326134333364313237373035363637636265343236383931303438356463366361363936633964
+36393865626137353064613336656637353039353061353532663230396462363431393636663239
+61346565663764363666393034633239613431626133656134393661393435333334633736623730
+37656334656131623038363761343863643966313730316330363061326336353839623833643635
+35653333663239363436326131663537613735616632616165316435666134613862643265383638
+64323637623364313564313730643766376138663436356530663236313133353161643336663163
+34353735386433363362393336366236303132376235303163363231396266306462643261643730
+64333938353166333664383865616262383935666531633466653832383237623566353738376137
+63393937656235336432343163313933303532646432663437383635386164303039386535393334
+32356462626633623036616531383636633533346537316132623438663365373966343831333061
+33613431383038623162656262333031386265613561646530653737363339383631303137306131
+65643961393138373137613637396465346432333266303838653935373061316532636466316439
+62343863626564656232316236373735303734623933353634643337653036353639643139383462
+36616134373065616162336235353564663735393332636166306133373336373139643466653262
+62373735303130376534343930303532316332313737656434666665346133383534343066623634
+39383332626337323061373530666137333133653237353131363261366664623363393864616436
+32356238343137336430386262633962626466623438323437376566663666623236333432316532
+37356138343132393362373266396631353138373639363062623135666631383966313761303635
+33366136303632303965353634626334653533633737313032383036303430656662636230336137
+65653163326631636437363436663163376465373566366665333635326437376438633665336335
+62623666363435396561346436383433633936383261383639326535623861626539653833633738
+35626462383733363162616239343261346239303964376163636433313663353831633838396561
+30333331363336663336333937306437643332643332333061366638313837383532373036653461
+38316233346532633266373438336563613835316634396664663738366138613039616338353666
+62396166643461623136656266663637343862633237643665386530656436393363313134383639
+62386139663035663363653763366139396632656639623065383466633939363433393339323664
+66316138383238313562396462633731323037366461616434333865643363653339656364633265
+33613234613766626461366430343663633864363536646664323230323338383130306633613165
+33336133363466323062363961316632643133303962646230316336623731616230353932316562
+66303565346534363030323763336562353061633230373230303465336562396463376464643637
+63333137666562363135303264316332323031326638343032313934626663373362613133646334
+61653130636266633034383538636236313033373334613336356533633936643933336365346133
+37626263623035646232663433333532623031623462386336383032653735333335633931363733
+37386435343331393133333937626431303330613261396237306262623563633632323936316535
+65353638396430373937393536333565363830303333373863313762343465613861383262393366
+30633261326638383538623662653839393130323539646165646439613039396135656161656532
+65313662613533336161306639663131666132313037393338303261636433646434633761376538
+62626135633733323063316230636534393334336634643330323037393566303838336137313165
+37636632656338383664323264636132653432346164323533323739623730343937633938353735
+62313035323830303964363665313235313066336330336231613833316138326234393331636166
+37383731613537333464303431663236393933656462623165356335623165616661373665326235
+30333162636437346465633031633734623366356466396262613139623262326631666638326635
+32373631633234323365386532396561613366643139613539323266653130333537643465396563
+35346638326265343564343733303535643230663238336535343937626463343537653666663030
+33663563653865376135666633396164373332326336313130336661633136613233356237666137
+65306431636535356531333566303065643065653963313763393066353630363135336365656333
+63636239336264613161656135303633636336646531323534623063333439626331613138363239
+64656262313936616161326564663632653037663430653635356533393134663331353130366235
+38366639623662663230343039353861626432663933633137313238633332353739396436373633
+37353236363164306130326662346230336135663861346532383139663362656365646430373038
+61353932363561656537633534393430363236383566343839646231343730633864613036643530
+36633534343164376466336161333833653136376664353661346436353233616430396230386437
+64393430623864646334623137343537656563313865323336643064643766633035653265316539
+62636434653931613337336337383066373235653335656161656438373165616561323765323931
+31353661373532626231656361623038626361366632663764333764663737363137333732613234
+62376437393637316663353739333935343866373164333364346165313632313639636139356535
+38343639646362636635346634363064386636623635663536366461373431343362653839383138
+34323737313832343963366536666234363439386337353838323233376464646362343737313665
+36643237316238616265313332303162383033323363396330303766313734353563353133316530
+62643032326237626433363932666164336161346532646634363564326432396637346665636637
+36623561633861396439623835376434653738623862613333643162343362613865323363363434
+32633638306438653638343239383137396530356564356338623330303661663630656639666461
+62313232343461633636336538326537323266666466646261633336393464306438653136613637
+34336133623361336563306462373963613336383265646637313139653765656433346238386231
+31646362353736646431303937633033386435316336323062346235323232383466313566636162
+61366430313335313161333163393164353530303938386435623830353962373831393235616531
+31656565633534666164303532633235306133616536646161393365616231383866326635376630
+38666363386232633865366533373630356139393030626230653834613230346664383734616336
+39653736633237303161306632333138646633356463373063663064396561613162663138366339
+33326235313165343866363234353336643934656363383464353036353138626638373362393263
+36326438303366623137383530393434353933326163356634333837653830363037316565626466
+36643339376262386430383530343934646361303831633863653765303530373765336531326535
+36646330366635366339303731376662623366636163353738646535363363326437623439336466
+39373861323738363734613032383136313335306462386436633962666139366165343263616338
+64306536393966613235376264383463313763383161343634336362393865373865383366313839
+65623761626166366437323234373130393237643963376235316535646166326663646335353036
+62366562386364343734313261363636636639633639663830666130613833383766316461613236
+37653030326661623838643861353339353562366537346535363065356235393963376331623064
+36316464626439353464393638373963326333373037333761663239343431626563313735363031
+33613663613038326465623462623565343963333064623464313039376332323935353736616262
+66646161623564316439666431393462633463633432643763636535326538356135663535383734
+30323063323361376165626436633632636234653062623337346562386338663733396532323331
+61316539393566306334616435343665623931323866313636663033663161383964646430663263
+38663833303063356637343130323362313734646564633261653934666665376661653033373934
+64393934616465383964353464336136636436323563366562623839623862366332343339613334
+63373063656663316138653939323165383735623263646438376533316638623734636261663035
+33636465396431356334383063633866623063316163343262623831616137643165366564646532
+65303033313137636562353238663564303034393166313864353330656335663233643763626239
+35346334386130653462343531336431623639376165653263373539316163383038336636613136
+30626137666133623063376333646134643536653138333464623930323931613461366465633437
+32386531323739343363373737326263323836333438356133613065306633326131343838333363
+62356331623163393230373838383866323063633739313339353839336232363430323165666531
+34316231376232396464356436326165616266323430313632393362313966376563613534633339
+61346532386537356262633936366533376239616531373133353633336235316534363436393238
+34373232383665373539346664316463613962383961386530323539313538306165383038333736
+31343463373938636630336364653931343931363461663261373333363336353438613266333232
+66316333613134363630366632623861363135373335613837653937666466623163613231376431
+61623964353534316464373737326134666538393662323663306563633430616363353833373131
+61323563653235646139623139303162616235323664613463336364326638363762653665666433
+30656634393965306436616261303330313037373030353266383833326539626263326462363833
+36656538663733313533653864646232333934333031363433613839323632333166313162646461
+32653935393738646163343263633563333132616436613930613038313462633735636131653265
+64663439323665313130653931623564373737616632386338336465363564373233616466393934
+62373763326533343830366438386430306166323834646362313838313662386637613961643138
+38383362633730353730333335316439663631396430623135313565313431646465336631613666
+64316638646531356563666631626663383939396461313631366462326161643730346436633734
+63626633303336626137333565306664616363386162316264636331386134633461636162333835
+66326139393733373262343537323136633233616331373730653966353736613538633430643264
+33623731366330323161643230393635646366623139326534353561616632636338333232386431
+35353539333831613064626165386536636664373933633833363736613335323434383663336561
+34616130656232326631613835646131353936326631396334663335386236653066326564656238
+33623065303039666461383864323031313737316565366133326136333138393731653731663036
+32663135323464653030626430303439353030393865316266383164616233613039613032353130
+37326430373439363631323061333431386430613361656439303734393730326264643731326638
+37343836393439316330653432303633303439623337613336626662323338633535346563343938
+31333963303866313763666436653265306164633731376432663634623131613166623535656362
+64643232383863633261613061373131313933626666643631666238663931336566343561333439
+66653939353665363065656631323130326664343464303338333161623639383962356538623237
+33656337323733353738353034636138656138373762343336316336346264393434306338336136
+66643966336130346263643232373334626433326334633363616337343466313438343133366637
+35336561353531306164316639643262316235383631626636633133343837663032343032613362
+33356330343833333438663465363364653633306134646537656361383864356461393963313666
+33316236326665346233653331663132313531663263623762393039663365303333663231373262
+63643634363762393863303739626162636131366564623333373534316461383861646332373532
+61343736396465646538363765653864626636376361333935366536343133666432323530376333
+36333664326538336438323138393561616536343932363733316164316133656631333233626562
+33376234663863623365373365303936376164373530653839393631303732356662663536633135
+36326439646465613363633233633836643162333164663266393161626231393138616538643738
+35303532636532656266623434333162323230646636366334663238613733326237636232623763
+37643066613361313436346531373835343131613061326366643638396633626261303630623338
+32313632653336316531333065343830656365306430623565393935333065663537316130633936
+66376231626239383165626536626564306331623935336331666662376264643765396464323135
+38353438613435333864326633326530623036396665313762613865383365366137303166306436
+35646238306262613432333434346639393939333264656530303637393566633934633062666661
+62646537306132663164643663313138646639363131346133616366313137333965396137316433
+31613439613433383663663666313237613336326134343437373637363038643332376532383339
+34663735386235313532633431313630366537326135366132373063333035613939363832336433
+65663230626536666565303031663062356639376538396531346263346139386436633434623363
+65323462393138313932623239373132326463323830616237323665656437336562333666396366
+30313632363138666534383631313366653532336238303036623235303866643632663335653066
+32616363326134343038336431393436326565343732646438333336386366383066346231353833
+61363565303737346561643938666133363565383632346465656335363864386236393432633832
+34663863393063656562623134316235366536663638653563323465666566613464373666376530
+37366364633537666231653065366664646632393638663535643931633264616431626366626563
+66656561376664303838653437306433666131323761323639663665376262386564336363376638
+32343661326138653734316161356130313636616434623434613765386538366131353036643532
+30353237323831373562376332346466366437643165633738623066636563393036623765376639
+38303135306563356533663238386233646636306266353034343433383830383330653032663130
+32313932303338646637363762653232613138373665396436336264353534623633616138383235
+30373433626332653032343937653964373161343462393139336235396439303739346330656166
+31643936333139656232353932326531633566363366306466666137623832313435333161366331
+63333432383034396439323466663235656536663831643035626332373234643837666630626332
+64363531306531393737666230363631336666366536363464353266303633663563316234653634
+62313135346639376366306463383837636531353564306530623134373236613635303132383263
+32326663376138393633383132643964656365633966656231376439316165353630623764326137
+61303234646566343863653130343738373331373433353732663837326334633530666636326434
+31336135613431326131353864613331643137396661333566303632336661626134666565623133
+63383865646464613537383533636462333133386639363837653436366237666164613639396666
+30643034306330393062313132663661636163383336373134663130666132373534383734643731
+30303163353563306465383134626137376630373731323939653531356436323337616662653565
+61313131663262636437666531623466623438326136653332666238336566623963343334623266
+39663134636666326261633634383264393662383733353663343734306534363934356165663638
+62623437633031663364306231663162616630393531346130333764656431616161626466343462
+64333865396463666161363134393932613636333330316136363737336130343663653063623036
+36393038336462373933313934353939336132313135623534393361656639333864613637626137
+66656331376235636661363534393163336439656264396663373665383737633263373934643231
+61316436343539646662316639343662336438383335383838373261643838396439316632653838
+64643135343938366236626463613036386230316263376165336232303434656230366561646164
+62656466396439666363613634366633623935376630313034633230643162333334313436643930
+34333837353937636339363364353333326238343536623131333561376230646237366437333836
+37613363663663656266326439316334383837613633336339396335396539636562636334316338
+61313536316364386262666663396261356538306536333761633763303762363232313332373438
+65316263353165653336343562343164306566353630326333653664356165376361326366333964
+64623261393636626439343738653731663130643839306639663239623834366364613832326233
+31396432343136306365393132613531303632656363303833313139363939356132393230633966
+39383432613135646435396262646461623735313135356230383533613136656639643539366233
+34306231313032303537626532316263663337303362663635323731333561343933663265373639
+39313461353561316539643436343764636665316233303438643736303464363839313135633333
+38653936663234663830313632623566336333633561656631336132323231353432323031663863
+66613363343431656437633631336638383932653336303762613730623534633936306333646135
+61613261613932653361623263656237643534326132613339653861343666393466613439303734
+31303430343132636332343134303936366262333566316638636233656330333734636636376164
+36383536313534306535336438633435353463353630326461336366666535313638363862616136
+36616236353033343566626332646133656235623162633736303762306430336238663835653263
+61326466663161646531383137333439656531383566303164366637656661306638623439323164
+61663163353263373864323734373434303530643764633762303139333336323832643063653734
+32373266373239366633636637613433336532663135626238333936353431343532316536653061
+37393131633066666637623538633530653730323362373432656439333332366638336361666239
+63646631633762333938636338323537343734396133313332393436326630383639333034643961
+65643139303531376163613833666532333734633438623935353635613635336262373432636462
+34323738386631616266313462346265356164316238323239646462643762333166666132633965
+37333535376235613538363938353135616366393964346164633861396331633139613463393035
+31313262356436646261636139383431643637383235623334353861343064666437356465373339
+31323364646635306163646131646339383931613461613330636561313235663934376632373132
+31633235346339373763303138356464646231373266366431633038646533616161613462333231
+65623835353963376532313535306331636639643635323434323362326462376239383630663962
+32393634366233616133323531633030336635623134393730626630636465653065633462666661
+63363637326139333030633333626531353866633839376661646437353939316166366137363865
+35383536666462343135623266363939623335613632613830316432343363313538623364666634
+37646531346433336365653935326437343461323861336133306233613931636231316232643034
+35396539373663633237623862623964383463613936623061376333323439653963633861663631
+64623866396263663038373561656239643664383233336433623036393930636264303662643434
+62366632323864633733626135343339623030636334356331393732363139326662326563663366
+36313262323933313631633562343230363032656636666465373062656664333964323537633362
+30343266393230393665626463316639336665383763343332333339383464333533653135353365
+34306135613839326361623663633033623238306234666564626565313137326431383763646433
+35316339366234353936326466363435323331353165653531373733643232356236383838303930
+61373538363238613635313031653434396265316434353335386332666135323366393062376162
+30353730613433383364636164306336396430633133333839383261366162363930303131303762
+32373461396264643232623337643266616562393865393864363161616337636436383131643932
+61316232313835363634353930636664323539643133333632626631666430363534383866656631
+30656634333836623133623731373861366333643637336566353064393332626461376334333733
+30383164306561383738333238353766666565656137643661623466313535623936353831303863
+64653762656364356664383365343264306336663563373763316532303537336138613238323438
+64376130656466393564613766633036623336393931313132393430313663373334353134363030
+39646665306137613034653830666437333832393464343265336162393231386437303539363861
+62333032393134666331363030336463363639366235656266363830653337333965303934626530
+31616532323334383665663936376130396334656137623537646663346166343262353764653439
+30396332346235653462633034653535396361383934646632386534643530313134343034323636
+32383538636537316532626230363361313330653534353962363932326331323966303833386330
+34623632356136616166636434633437356261313233333165303237346464396436343931376263
+39633963313062623636663533316538356162613734373830363838346133383564353336613437
+31643233343437393765376431613338383331363632613632396265656638646434663631303363
+35386332343033623534666530363831343262343736333366396238643030333337313838396534
+64633937636332313432326266643735383262643334613034643465366666336638393461616361
+31383038656235653239373164666265663865666537663335396137353939343233616435646362
+36393266633863393965363163376332383837626532343034363034346665343663326163653266
+61666236653837316639333832636536353534626365333939343734633863613032666437383864
+64326234303438363434626566306435376237336137316465626432383234383434343666333332
+33363333633132393265313662313731353162656337363730366439653532643438333639393664
+32623561636531376234613565323661613635623337303963653862393435663562333137383531
+37353532666639326334366133376162646262666439616135316432333934656631326566393965
+61643135653965343032316339353433323636353734313834666163633431366331393035393564
+32313966346634646263623130653934323736303364653930633439343339343432346538303831
+62333462343533386166623831383437373732373037356236376530353639346662663930336235
+65303564313939373532303137376565356364353332663961323366323264353738306331353963
+38343333653764323835303432643230663733643132333866303039656136326630303962643963
+39343737353166653862333030356533316165343766646231306532336530343964633136326563
+38646330386438373931323961653832613638303261653333396337623331323837623431656137
+33373631336462623531326438323739653662613139393866383263343134633335383738656363
+30333665663063373661623761356438633262356334373262613934333064326239376633633039
+66613534326662343435383438306133613765326361376537663331323938623436636164366135
+35323730363036643765376537336432333066303137333534353537633234626666336334333530
+39396133626434383132373435343165383563383564323864333639623764633064353131633165
+33333862613538363233633735653730326633346563383732353563643862356561616261393731
+66373662353937646462363262363865343531366463393761316665383230313331626630326236
+32353439323039316335343237623730393966356132656534633933333737653935613932643231
+63366163373062656630316661623131333462366564333462336333663833666363396639373936
+64613530383861643339353965666530663437356431353731623464336461383030306563393262
+39346566306565623331336234646439316461646366636566386236323464303138306663373265
+39346135663264366566623731656532323236316130383865346136353238353534303736363635
+34623532363033656437656235643066316364333164626662333536396631653531323437643564
+66386635653436616461633162316165343638326264303066633437313734383666623636666538
+66636634306532393339346633356431303537636364323832633737353139313138346632356238
+39393634666138383339323335306462623330333931326266366135616666613533633531653539
+39646535383666646662653936386231616230306536396432333536313834646538643936303366
+63666431663965343336343362356465306461313532616462383233316261336439663936313639
+35663261656534613634316235663139323937616261333530393235653836336138353630636335
+65616236366233626336356566326633646664356264313736306665316434613535393535353038
+38356331343436626230376334303138303962316231636631656233396231336437346435376532
+35316232306137333332663236393631636436633736353962663332626233363536633733353436
+62613565616332353461633930333636616164656635663064623463656238383430386135353030
+63626534393930663462323634343936346261653635636430616564643630313836316135646638
+36613363613238626364393434383966376430373838323461653131323563346364656330396562
+66373231643732316138383236636535366339623865393935383364373765636335656139396261
+35326339343266663863636361386431623238633139396264613166343564353236626237616161
+36626233356361666530323632393437623238663835616539373939636434353966643734653835
+30356437353566323266353233646532383335363366636333336335363634303038633965376165
+38306164663837366633306633393163356564643533663134653439663666316366383666623536
+39653666303363346131383064633835323261343361396462343566613237313732323366373864
+61313762353737616633633538616162353761353131636336623265313861616634376434363961
+36366662313737653465353363313537376361613534383563303764356136393563306230613466
+33356437613965633661336164633239346666636137666332303430633766643036346439326134
+30376636306436376564623338636231366536663530353537356461663864323234663530626633
+63656535633336346631386163643138326638663061373331623762376335646661316362363636
+36333732336138663034386139326566616236373061636661373038306135613031633139666635
+36626333646631636437323334653164316335396532396536356261346438383265643535306362
+62303034303161386465393062623963303131363165343066633765656431303035646664306661
+66333531383665646166393130386463323537386237383632333431333265616664323364306564
+64656463313133386330393266633932643863656436396265653161323665373861393031393338
+33373463303032326231313035646564663961363031613362356635623030376465383337373033
+30336263326364613633656532613439333631343665353866616263323137613163363333666664
+61383831616630373836343233373935633262383136663931643539653337643232363132376364
+65353662343539373437633133376638653633393864343866633865306231353264306262313261
+33366332316531616234333766323232343336613564313135656531306535643430636666346234
+38343532653666636235373366356635343339346237386436633234643738633033383664366264
+31396464366363323937333834626230383038653434346361316166343930366536373761353433
+62313638376132373661316436333430653735393737383235386164636535386130313533633830
+63616335643233373165393733613266646138353437356666316139633933346565633561353734
+30656261636265306633396633383638646233623164383236343335626432613866653834616434
+37663861373062653061316631373064336663353061306261303733313632373163326261663262
+32396263613639383534386236623836303635613631393763313130656134656236623238353661
+38643538343135386131393133336237373733613238663763653431636436376232646637386339
+37626131396237396239323031613265306262326466656634363266393064326631383633656338
+31313130343064326135616433343533653563666663393230363735633239363537376463663466
+61353865333361373538616236393235613366333635633664333631653361333962386462373761
+30313066356564363432363739346430346633386436613739363939336665636239323930636130
+61633639363635353333356266383661313638353162373535613165333063343332383231633331
+63313339306235303361393362333635313331623365666166383937313663376261653838376563
+37386237393762356339663434626639363666663931613832653539616630343137383230346163
+39326138383165326131616639623033633164626466663439386333393231373537616439326161
+33366634313739346266663564343330653062393139616464393634313234336165356338303439
+34366537613163653339373062646431643537316635343438343031613937343734356130636230
+35353334323130303439613233333439303234313530343861316261613036326266396134393938
+30393032393864656661346464666262343431386364626662353736343234363861663437326532
+65663835306366313362656135386430666633383165623965663838646433613835363836643365
+62373730343831633033613631396535333232333331636163366162613131356132643835663766
+63643531663237333935393330353733323730643732386362333734316632636265653731663039
+37623365336562623766643833653533343238396139336231326262326330316338343738663031
+37383334333634366464653836353238373061386334333437626537616135363736313364306366
+34396636383934306664363835633965353463333465333966306537353735323564643565623261
+31343932316537346561316662306139343266636463393130653434666666393338366531303734
+66323965346632306535623931326133663161663464643337373761343661633763393666636162
+66346566383937626161633339663732666436343437386233396332633261303533666436396430
+64303566396530616365613935623763323962616564373130383637623334636134623637326465
+64303037333035303930616133396336616432663338396634383037323238623961353136323965
+31326266383838653236616435313936396537323761636436626539323336663037316161393433
+64626233323935396232636337316634623037656231653661303462333961346230666230313834
+66626661643231386135363565336437633738613263636364663336313137376635396162366235
+35316638353430393837386265356465363834666366636432656237646634666533636631663530
+36656434353038626332336263353832376563363035373437316262383733326661353762393934
+31333532656666343136343635343435386337363962363037336331623239373035633631346337
+31316231623761366235303538336339626134653238343132343838346363353266346239353663
+64613566313263626537333830646439396536366135346362333162366539363537616332386262
+32663862313739316330636334346664353666363933623563643365383630373866656537633033
+39373331663663623831383830656237653034333932376263356566613162326566346537373632
+36356161643766343934643636633633363135653537396333613532656464663535653863323066
+63393662666463626635663062386430336233613637363263306564353563616439666436656162
+62363330376430336663393565613736306165336630383336363263643032653062346661343766
+65646537343063663864333933363938613438326163353235306239346236656561346264343039
+32616331373062323066306232383030373130303565666463326434383331343361393331343039
+65653536306538353830333434373433333030353465313866393966666434663238323232323364
+30343535383631313431636462356630323439323965353033383536363866323461373538666332
+63623935343665323033326432356432323730353864646431633035363831313735623063316465
+34623064303864393365373635353263343033653064313163633936366564616661346532343138
+66383130396232353166613531343338636664363164613165613737353762333466616530643937
+65666530363165346331356262363065653861386261623566346135383030656163303332323436
+63306137623430613661333733643161386138623934313863643561313061363061663435353335
+32353362663064613364653236613862383830356431333839636163623432346638303230666438
+38353766646231383436636463346436393561613339316430323463363731303762353330346532
+38646130663862323466326136313332306561613933646637366235646338343161666161383431
+37626230303633303664366161653437643331386435363631313935643764643835383662353536
+65626132313961343564373538396237363934343335633231656362316238633030623365663063
+30623232663930643639303437336563363131333531333238333663333136353964363439363836
+37376233646330323364363764393732326462316235393633626134356138653430346537393764
+32393739363637376534313836346239626639636332326666386334636234353535623035363266
+64633661383438363336656539373033313635626239313232373233613764323665663762343461
+32343938653135313863316233376632396666366636643036623566393739393537333235396239
+34303034396138656531343662613838316363646461643136643432653132306466623837303532
+65316139316432633039373239326539383165313430656364646336333863303464643961346363
+36623830363235316436306563313239636463613537623962393061616632356632356136646531
+66653561323232343231613863356466643030303066396665623638383662666465373833343733
+31356563623761636630626630356362646164373662383562613264663966326631353237366130
+34393439356263383732643665323431653738633236313539366535396664616261333232306535
+63306662346465303835616666333434393361306462653861323430366566353435333231353935
+34383264663930303662663462626535346130613033396435653934633933366464343166306165
+64623461323365623634346463386234386561306339613461613438663034333334643365343531
+32303637616336616463383566386139323639613731303263646162613262343531306665326261
+66393038653234376132646136613263383531656632373631326361313332613739386465343935
+37626331633063336232326333343037646432323265326131653665333863653337663961383737
+36663361663232373338623931393538393461646538646565323730393562353836623263343832
+38303333386363313634643930663832656262616537666531393536656664303539306563653265
+64666538333135656132643637346666353930356635393764333538396662316366353166376433
+33626232383666343030363263626266656538616562663735353534663164376434346631383762
+31376561376430333036393131356564663737633064616361353038633839656164633536613631
+66646665613132623062383465623738363330633039373135343333363039643332363331333365
+36306636373238396430336530633763613332336432363933303733346133653666373132393063
+30633437356363666235326263386566643062343534353238633062393565633838623839316634
+62323239376532383163376237366431313734366665646161626232616566323631383536656632
+36653535643537616230626633306630383934373135363538656339626432666563663638316363
+30316262336461303438643964366434366332336535343437666432663566323761306563623261
+30633965623530346165633936616366623536666230363130386633633061343730373365303833
+66646334646634366433626331626137386531323661386132316235613966663730336432333764
+66306532303566333834613537666639616663633466633633613832363164623536373738613265
+38323038343862323166663533613830666362353630323035336235393565663230623562356166
+64306331363234336433323364316232653934366662323465393961393862373738343063316434
+36343035396536363136323734623132373763366636633939616339323965306564303031663331
+63306463623732373462313035623532646334623532363666633461613066323933393433376463
+62626563666565663438393332646435333939653439306234363930303637373965643366656131
+31383834666565623861356531663164646165313638353237643831343337313362306232393737
+36653062323561346661326133326635643363336465616636316666613335623235346161376136
+36666264633232653638626138643934616366663938336562353333393265373137383833356234
+32303638646436393865656336653664313136653831336636386664333965383461663166356363
+30383139323134303035626438626632613562663164393934663636636338336134626530356134
+33643930643532376532303466396264386166646166316166366661383263666563333764643365
+38633438306538316338623631616337303933373432646664313736613035626365356433323737
+31323364616464633830643133383661366161613137356431663330633032386136326334343264
+61633333356230326236353330316264383738303033323930666562393932343235313932666133
+32623636643563623166383231396433303735303534356334623330323933666636366365626266
+38653038306135326431343832336331623564633364663033653766623832383630643964643032
+35633431663062353339333266633835366430646563356434373537393937313932346432623633
+64373632343264353066633436626531636232653038613263653038323830616164303361393732
+34643233633731373637336137383763303736353237316134393835663032393861353934633038
+30626531356333346336373535313433623035333466343066346265326336643162323133656339
+37323561326137653939303839343837393763653465363462356161363963353865386539623333
+35383637356666633731396638643966303063313430393038393234346433646566326632363637
+65306466613230353261616366323634313837373030623563613562333833653263346230376439
+35643836346335373261326365336531353733636236373466353332383737613639633034323161
+66393432653336636362313962616237316232663038343665343065313030313937343834356436
+34326266343364616366343039303332353161373263313730373839643361326333616464306133
+64643863633336363762306131303431636366613038623562653035626537353466643231356561
+37393035656533666638336637373932346662346436313561313964316139613763616335316435
+33656230356365373365633830653835376639373365623663346635396361333338376139666232
+33626662616662626363636564306530613034663039653636663838326162616263343562393661
+64353134363737623139633734306430353265323835373833373261363031383163343938373862
+30363735633531376230376161643037663762316466396134626462346133626264353064333039
+66333531613735313333376336313565376632346565373134386433663935626363336635356337
+61633264363635303833613462346263636433383634326330393236663835626432326336396133
+36396462323365633338663935343733346365356233653436613962356366383365326262663236
+34316233626130336635333933646463663461653364313338343534633630663733336261363431
+37343664333633383536633464326466653432353733343933616264316364666661396631336135
+64306637623234643735643430323262626539383439373363356139643362663939336665376139
+35613864303837363635353564393532336162393566313339633866316266363261623266633032
+61343365393762386465356164646531313865633633313866313162393431393132613131643462
+38646131363036313964333930663234396139613362326331333538376364323461353839366562
+62313066663830313862326162326166356537653135313036326239353032636634656433316530
+63336532663935616633373261653666333662643561313235353466303632623364336165623334
+63346334303762326363643838336362616466333631376135643466306638313038353765353034
+61613033623132653930623634376537643230323330343534646365356339333938396565336533
+33303730666433646465623231306233353130626237353236373836333438666565626566326531
+30373637353237393934343064616663663762343135313865386331326266386639353430306130
+39353534663362323665616166373733623639333164656633363537613437616635363639316232
+37373365336531323639663935313836313338653030396133356365336437373963313231636332
+65663433646665383836643362383739653663636338346137636263386366386234306130303264
+30393266376138646465613436613736373662643365663330313230346139613465383136333463
+38626661643165356364626164663164366534316462376633653231626233393934303333313963
+39643362633761353731643239663334646266613536383661626462633062653231616236326332
+32393634643030656535633139336132343639313939313436393865336361633430376166313230
+63383435663766646537363136373138316166333031663736616461316134343461356438366361
+37326663343434323563613231633530316364643164646464386361656632633539353135303432
+34386162376235326631653764613866323432366166663966356534346463306231656665346333
+35356633356262303236386633316539363536653438633334623161343136623161313463626633
+61373637303630633233383430346534613336363739653332376461383531653832333264356163
+32346562636662323066643932326436326333323537323932343033653862356163353730353438
+31313531306462636131626136613135646231343633323065623363643661303336313463373130
+30636630623734636536366631653031326162383034623233623463326434366635383836613361
+61356463336335646662353735333662633231396331336336636235663839353163616234363733
+32373438393730656461383537353038653739326335313732636639656263643033346635316465
+63306437613863643932396361346335303331366535393863613663313133393730333039306233
+63376563366636313435623664323632383139653932643461383536313734343430613736393734
+38313061623163313931616564623366353266333237643639366166313564336437376664303938
+30306233633437376233353237393331313734633063666165323637363938353239653539613439
+36346232626466396431386664396535663162336166313438363265353232363365633034383331
+36393164386235613134663566666539323539313735383636303631336337386366643561346331
+65353962366336653139356433366465616637386333636439333365396563363663656231346333
+63366636336131656237396234353837303035323637343265303566333761353431613135356635
+31313664316635636564346531323638633266356634323164393563383935343738346632333237
+35656464356338356538366664636265306165653334316363336435666262636634326636383934
+36313136373038326363366263616438306561653565656435643063613537643732643332363037
+63633962333637326434363936346633313634363961613063303664323761313533646638666139
+64616436366638353166656133323131633461363663616336353730336639653463383033323061
+30646237653463313261643237343933663032346133336339393965626166623066373735623836
+30653331656635373838633062333638333037316439323663323838616530663530623434653964
+37616362373331633030396261333038373162336536373731396363646334333665396630376263
+37656634373138636633386163393234613434376265393065306333353661326266636633323634
+62633031363965346337363031663263313538393064363761366336356462383737313633353236
+35613261653563663663663832373664383262306232373430323934376330376166363738343962
+61323863336664383266313264613563636464363566356637396261353039626166623331626234
+39353762353536646338613066656533303332666664353863343838356464616437623934343263
+31313838326531356432353563326334643665663735366233666534343733323865636562326530
+63333166303936643736623066653832346339343133346632343164373630616538633936633631
+36376663343934666133343535646662623038666633616130323163346533393765653337353832
+36616563393930343065666361376635326464333435303736386661396263346331636131386336
+64326665643536363563343964623536306238376535656330323061663431653532633434386634
+33346133656630636565613065323634616333396363346534303163393337613830366662303731
+61633530393463633635346136656366333030623038616439363631383466303962333238373661
+35386332613264303739343931336366653431393134303833323464383439656661303163636464
+61363462363064393364633061336262353261336662363462636462336462636535366662333534
+63363666626137636633356631653862626639346634373238353636666236623964373231383264
+31666563353034386365636264346464326237663235353136346339393436383035663034313630
+37333963373135643430653761643662353334646439313262393635656662353439616334356338
+65313166643934623065353164633965303166653830306165333837346262393563616335343764
+39313033373339626534613838343239323661613530323666356665353431356439646231613638
+63323862353230373562393039656361376434366237653365373937336332313762333561386432
+61343435356633396465353133333066333563313330396234626165393364653031353939633731
+37623439336262373838393533626162333937623133396365373034613962623161393231303562
+65626133623833383465396632366137396135363434306337353038333633653264616437633635
+66396435663931653534643239613636333862613263613434396261323238333461623661613437
+64633331393461333831633162623333623663376165343530326262613362653730663463313039
+33316638623664663837383837306163663461373636643032303933366338303633613830356665
+34363165663232386237643464646163663136396232626138333165653162303339616362396230
+37383766313039643438346136623864326334653938393039633961373339376665633536336437
+39383033393635613034333634373834386266626534363833313534393134303138363162316533
+33653333373962643965336465326635653732306338656631356564363961366462636230373030
+63393837356631366638663964326530666536643932343861616665633331373230336530356138
+39303738386166336334633433353339613366643436313064653333626130313361656237623163
+35663263633136373765343330343338306636663534383730353235636434656138643466383261
+62373661616137613164363665353535633637613263646361313337336533363665626462383633
+61383731303132393138663639396433343530336266633939653366633438626139666161653638
+62623866393533346136343339363334666333613666613031613135626235633564353463366664
+30393130356664343434633132313537383063663130646464346263636133303034316266303739
+30656661303231303434333562656237633233616539333239303266373363613034626263613531
+35393937333761633232386333353134613362396138353030613934353935356637623630356533
+30626431366234383834383866353436326333386564353537663136623761623736313861366336
+31336331373537313739353933303261336238613630636462353031653133333139306363326566
+32373264306338353638393965343933656162373438373366333338623434313032373538623835
+63316434306262643532616232646430316635306535316635326564316664353063343331653963
+61306530396630323031386534653062636533613931613632306637343364623464386137623330
+39396166306333346665323139356135643662363564633631383362303636616336613732383763
+35353861343565383739336535623962666239663963626162373861343738663364386439353133
+62666232333533376563383536363239366135306134616439643738306331643539383034663363
+37366366643838666338396537373232623232326263616165616639353939323463663638643132
+61353038646233646231393961663863373466306461373832363435613635383836363633393039
+64346134633837333332366135363736323234336235626630653965353039663964383535373931
+63303262346661373535376161393136656436303235386333663033656164363636346632616433
+31353932643266343361626431383835623761653633656131373134633163343137363536336661
+34316633386263306432333338313462393031383832333533656436336230666363316133396162
+65663861616538306333373032626539663535373161383462366164373764343437323562626136
+38653336663263306533376466323132623261386166666435353438663763316665653039623532
+38323730626666353636663830373765383138303330386663663737623531346630363936393966
+37663839623464393136303934306438376362313233643838373939323938666635626630633035
+31333466393833393361393965353636616661353166323937313032663139386431333163663035
+62373265306132643465363765376663623430656264613839336234343766613833323235353333
+66656639366130656534316639306638366465336661643263666337323030666263623036306362
+64316634353139666434396261653161646339663263663131386339346631653932653834626562
+62386665616131386138633839353262353230316264383130656330313333326538636261393863
+37633665613631343130313163376337363963653134626131643531353565666537613636373663
+63333633313561363438653035303563303532613736373634613362313663386563656339656634
+64616666346532376537336130353233623832336237376663663837643134636361616533666530
+63373065663833363734356130613230613739633134643766373935396531373965383862656330
+32306639356365383332643462336331383731643864636264633234616132386538396533613432
+32646638656233333661626335306361646435306234653436323361643866633235313962313637
+61333637663463643066333562373535363439636666643538626133623432643932666662653233
+33306137613735626135373430393033373132356666633337303134323231323235326434323639
+63326362306136333065393734396339336665313035663637303533393834373664623864386234
+31313062316334333130336138326132636366356266653531333435386231653063646531353933
+37326533663431376461383632643266663531626235393131663464373439396666343236313262
+35316165313962383632623262366164386130323065646436343236623230636664306539613031
+37363564343438376637386366376139613332623765663166373731316262303630326234383063
+35303330333364303366363135376262323365633561336264626333323564396132346362626164
+30623637333263366164373465353562356561376238353332353461623939633035643562356266
+64666131376335663832373136646266633363386139363864363939386534636461313237666661
+31383063366362306466633039363730376130373661366331643836356533303062323030396330
+35623431663561653264383531626136653363336339366332363431323635393561363763613134
+37643733633138396432623031666333616136643735646235346632306461313136653837326135
+36643935303264303532396332356561643063373263303536626433623264393432343933363237
+65616237656131356537366337316437363831303064326436393761623734303238336334653131
+38363437373264373636653531346665666363616233643563336133316439643663336263613964
+66613835336638386631386565343233313435356434393637326339623933306134343332316132
+64326434393134643866323935663331336539396636303666623364363133613861303366313736
+61623465646336643161313839326333316632653365626231616264616633623336633463663232
+65313465313965316139316531623863373235633362633731636633393534663662623663623533
+65653762623938343833653639373730363932366330373237653830316438356666333636663938
+66353139333162376439306530653839306436393832333030336632643830376663653132633633
+36373965646666613436383931643662383263633066356666666362306430373636336438626231
+37653338336462616333353937626363663765346664623862616162353865633463393263626537
+32333336383633383237613731346465613635633633383065643038333536616331333966373232
+66663231343266393865663165383937633439373064383636323137363566646133616332656566
+35343335376465653939653933393161396265396136363936656433316566613336613537623365
+37393364326337633362303662656333613934663362323331343135666136376365663765346439
+35303465303163333732343737383135303635613865346331376537336566623561643837333433
+36633930376330623737633836376239663333616134356530623264303337666432326332646433
+31633034303166616134353736613838383231666363623563316430326461393462333564626335
+62646337643066313563343466303231643334666437383135393432663538623464313735663431
+63336166323839656531633862326534353136303264616266373431363036643335616562363438
+63643464356662333065666663643464623139353833353536323466663462313630366235303065
+34623433613736646465616466633232656362356137366634393735623031343531633231306334
+33393137343637343734613133366239306135383931353637313561376161666562396237386436
+61386637376563346633303032626361353462323963366233613566643434666532383965626661
+66663165336164313431653363653939653262326537623630643237636163613066323434653633
+38613939316463663833643062303933383165393939333233643139666462363037613032306135
+32643266333938653962366231363364616339656137646432666466653363636265643364656363
+32313966356238356266356339636465376133653861306233343635303135303735623037383339
+37626335333030643932306164316535353933346462666337353366633966346363366337623133
+65343766653261353365643039333164663231323031393233623062366432373430396563663264
+37313962363831316137663064313631646433353033336537636132623663393637336438366463
+36393565633936346134643465306639633737363431656161376533633434636663656535613037
+61643330383366663266626436326466646234333831386632633566663831336437646563333635
+65616339626561353065626462633530633461643764373866376264636337636431366638623839
+31366338653632333037353233623962303866303334353033343739636637616239626237343764
+39356464396239383235396132316665366238373833303266343535636164623862656139613064
+33393264363634636231653235613133656138663763326263386334303537333733653132346533
+61383739663963643365393638616233323138616131376461323233643262656633636435303566
+32656438303466306361653366656464303335663661656437373031356365336334373961386264
+32396230326431376137356534336566643137356361316232333939343362323766393232373639
+35363465356235323331333265303535623630666236376230633364643237653762386630323836
+38363136373331623964623964373163363930313138393030353636643930633335323761383764
+37316135393466323139643738366537396133636465393565613765633938306164633263653032
+35353931643438633436306464316230333437373532356261613565643164656330643862386635
+36616237653834653134646439636266643131613761373833346338623439383861636330383133
+34616630313465303535613032626536303762623331653435333633303262326464306330393832
+30623265346438656137383937306366646530613564306230353939626366653536653738323139
+63363332626532346462313635353366333235323837353961323862343334353232313464626236
+30633336316465666637626239373730383965653737663639336261306264343530643364663561
+64666265613762313032633837333433643537666562653534643364346637356363653732306561
+39623538623763653136353464663164356232623333363033646666396232666261323233653661
+65393536653237383863653134356134653533316631623231616539653861363538376362663066
+61646261656336363931303935353764313562653736633431633263656261623039613737373432
+31373165386161373038643831333937333366636230326133616430346131386663653964313866
+37626234396631646639626436326466666561303734346134653764353234376136656662366539
+39376161616162653337353235643236323832653835356235363634346365346462346162306333
+61326534393264666163383466616166626463626666616438653765346638383763636338376463
+35616466306230383233366266653064343962393731393434363435333466616462376633336338
+61643061613963666636336366663562346366616135326462383864326562346534353032343662
+37363861653866363630373565346266623037663233326432316562356661333538666332313465
+33333930343965313030363262653862626461393162653135666666336262663634653333313434
+37373030356665616238363438613739366337383961666662363364343535393033666336636465
+39333431353939366439393761343039626663386164653330663135313839356535393362376135
+66353531353461333539633135363832393235333535333066373461346363343863323239626335
+65313638623638313437303865653736626133653239643232306437663237313432346633616565
+37303539333830663235393862396665313164623263353932313036333362643361383732346631
+33336330656565616331
diff --git a/lmn-client.yml b/lmn-client.yml
index 0224455..5584d6e 100644
--- a/lmn-client.yml
+++ b/lmn-client.yml
@@ -63,7 +63,7 @@
- role: lmn_localhome
when: localhome
- role: lmn_localuser
- when: localuser|bool
+ when: localuser
- role: lmn_exam
when: exam_mode
- role: lmn_wlan
diff --git a/misc/vm/Netzlaufwerke neu verbinden.lnk b/misc/vm/Netzlaufwerke neu verbinden.lnk
deleted file mode 100755
index e2fe26b..0000000
Binary files a/misc/vm/Netzlaufwerke neu verbinden.lnk and /dev/null differ
diff --git a/misc/vm/injector.ps1 b/misc/vm/injector.ps1
deleted file mode 100644
index 4c785cf..0000000
--- a/misc/vm/injector.ps1
+++ /dev/null
@@ -1,155 +0,0 @@
-param(
- [string]$ticketb64
-)
-# BASE64
-$ticket = New-Object System.Byte
-#reading from b64
-$ticket = [System.Convert]::FromBase64String($ticketb64)
-if ($ticket -eq $null){
- write-host "[-] Be Sure entering the correct mode"
- write-host "[-] Cannot receive ticket from file or b64"
- exit;
-}
-
-
-# ------------------- FUNCTIONS -----------------------#
-$ptt = @"
-[StructLayout(LayoutKind.Sequential)]
-public struct LUID
-{
- public UInt32 LowPart;
- public Int32 HighPart;
-}
-public enum KERB_PROTOCOL_MESSAGE_TYPE
-{
- KerbDebugRequestMessage,
- KerbQueryTicketCacheMessage,
- KerbChangeMachinePasswordMessage,
- KerbVerifyPacMessage,
- KerbRetrieveTicketMessage,
- KerbUpdateAddressesMessage,
- KerbPurgeTicketCacheMessage,
- KerbChangePasswordMessage,
- KerbRetrieveEncodedTicketMessage,
- KerbDecryptDataMessage,
- KerbAddBindingCacheEntryMessage,
- KerbSetPasswordMessage,
- KerbSetPasswordExMessage,
- KerbVerifyCredentialMessage,
- KerbQueryTicketCacheExMessage,
- KerbPurgeTicketCacheExMessage,
- KerbRefreshSmartcardCredentialsMessage,
- KerbAddExtraCredentialsMessage,
- KerbQuerySupplementalCredentialsMessage,
- KerbTransferCredentialsMessage,
- KerbQueryTicketCacheEx2Message,
- KerbSubmitTicketMessage,
- KerbAddExtraCredentialsExMessage
-}
-[StructLayout(LayoutKind.Sequential)]
-public struct KERB_CRYPTO_KEY32
-{
- public int KeyType;
- public int Length;
- public int Offset;
-}
-[StructLayout(LayoutKind.Sequential)]
-public struct KERB_SUBMIT_TKT_REQUEST
-{
- public KERB_PROTOCOL_MESSAGE_TYPE MessageType;
- public LUID LogonId;
- public int Flags;
- public KERB_CRYPTO_KEY32 Key;
- public int KerbCredSize;
- public int KerbCredOffset;
-}
-[StructLayout(LayoutKind.Sequential)]
-public struct LSA_STRING_IN
-{
- public ushort Length;
- public ushort MaximumLength;
- public IntPtr buffer;
-}
-[DllImport("secur32.dll", SetLastError=false)]
-public static extern int LsaLookupAuthenticationPackage([In] IntPtr LsaHandle,[In] ref LSA_STRING_IN PackageName,[Out] out UInt32 AuthenticationPackage);
-[DllImport("Secur32.dll", SetLastError = true)]
-public static extern int LsaCallAuthenticationPackage(IntPtr LsaHandle,uint AuthenticationPackage,IntPtr ProtocolSubmitBuffer,int SubmitBufferLength,out IntPtr ProtocolReturnBuffer,out ulong ReturnBufferLength,out int ProtocolStatus);
-[DllImport("secur32.dll", SetLastError=false)]
-public static extern int LsaConnectUntrusted([Out] out IntPtr LsaHandle);
-[DllImport("secur32.dll", SetLastError=false)]
-public static extern int LsaDeregisterLogonProcess([In] IntPtr LsaHandle);
-[DllImport("advapi32.dll", SetLastError=true)]
-public static extern uint LsaNtStatusToWinError(uint status);
-"@
-
-
-Function ConnectToLsa()
-{
-$lsahandle = New-Object System.IntPtr
-[int]$retcode = [KRB.PTT]::LsaConnectUntrusted([ref]$lsahandle)
-if ($retcode -ne 0){
- write-host "[-] LsaConnectUntrusted Error (NTSTATUS): ", $retcode -ForegroundColor Red
- exit;
-}
-return $lsahandle
-}
-
-#-------------------------------- ENTRY POINT ----------------------------#
-
-$assemblies = [System.Reflection.Assembly]::LoadWithPartialName("System.Security.Principal")
-Add-Type -MemberDefinition $ptt -Namespace "KRB" -Name "PTT" -ReferencedAssemblies $assemblies.location -UsingNamespace System.Security.Principal
-# CONNECTING TO LSA
-$LsaHandle = ConnectToLsa
-write-host "[?] LSA HANDLE: ", $LsaHandle
-# EXTRACTING KERBEROS AP
-$retcode = New-Object System.Int32
-$authPackage = New-Object System.Int32
-$name = "kerberos"
-$importnantlsastring = New-Object KRB.PTT+LSA_STRING_IN
-$importnantlsastring.Length = [uint16]$name.Length
-$importnantlsastring.MaximumLength = [uint16]($name.Length + 1)
-$importnantlsastring.buffer = [System.Runtime.InteropServices.Marshal]::StringToHGlobalAnsi($name)
-$retcode = [KRB.PTT]::LsaLookupAuthenticationPackage($lsaHandle,[ref]$importnantlsastring,[ref]$authPackage)
-if ($retcode -ne 0){
-write-host "[-] Error LsaLookupAuthPckg (NTSTATUS): ", $retcode -ForegroundColor Red
-exit;
-}
-write-host "[?] Kerberos Package: ", $authPackage
-# GETTING CURRENT LUID (INJECT PURPOSES)
-$output = klist
-$CurrLuid = $output.split("`n")[1].split(":")[1]
-$sysIntCurrLuid = [convert]::ToInt32($CurrLuid,16)
-$luidFinally = New-Object KRB.PTT+LUID
-$luidFinally.LowPart = $sysIntCurrLuid
-
-# TICKET INJECTING
-$protocolReturnBuffer = New-Object System.IntPtr
-$ReturnBufferLength = New-Object System.Int32
-$ProtocolStatus = New-Object System.Int32
-$KrbRequestInfo = New-Object KRB.PTT+KERB_SUBMIT_TKT_REQUEST
-$KrbRequestInfoType = $KrbRequestInfo.getType()
-$KrbRequestInfo.MessageType = [KRB.PTT+KERB_PROTOCOL_MESSAGE_TYPE]::KerbSubmitTicketMessage
-$KrbRequestInfo.KerbCredSize = $ticket.Length
-$KrbRequestInfo.KerbCredOffset = [System.Runtime.InteropServices.Marshal]::SizeOf([type]$KrbRequestInfoType)
-$KrbRequestInfo.LogonId = $luidFinally
-$inputBufferSize = [System.Runtime.InteropServices.Marshal]::SizeOf([type]$KrbRequestInfoType) + $ticket.Length
-$inputBuffer = [System.Runtime.InteropServices.Marshal]::AllocHGlobal($inputBufferSize)
-[System.Runtime.InteropServices.Marshal]::StructureToPtr($KrbRequestInfo,$inputBuffer,$false)
-[System.IntPtr]$PtrToCred = $inputBuffer.ToInt64() + $KrbRequestInfo.KerbCredOffset
-[System.Runtime.InteropServices.Marshal]::Copy($ticket,0,$PtrToCred,$ticket.Length)
-$ntstatus = [KRB.PTT]::LsaCallAuthenticationPackage($lsaHandle,$authPackage,$inputBuffer,$inputBufferSize,[ref]$protocolReturnBuffer,[ref]$ReturnBufferLength,[ref]$ProtocolStatus)
-if(($ProtocolStatus -ne 0) -or ($ntstatus -ne 0))
-{
- Write-Host "[!] Error in LsaCallAuthenticationPackage" -ForegroundColor Red
- write-host " NTSTATUS: ", $ntstatus, " Protocol Status: ", $ProtocolStatus
- if ($ProtocolStatus -eq -1073741517){
- " Ticket may be out of date"
- }
- exit;
-}
-if($inputBuffer -ne [System.IntPtr]::Zero)
-{
- [System.Runtime.InteropServices.Marshal]::FreeHGlobal($inputBuffer)
- [System.Object]$ticket = $null
-}
-klist
diff --git a/misc/vm/vm-prepare-sys.ps1 b/misc/vm/vm-prepare-sys.ps1
deleted file mode 100644
index ad8f16f..0000000
--- a/misc/vm/vm-prepare-sys.ps1
+++ /dev/null
@@ -1,73 +0,0 @@
-# Installiere alle Mounts aus target.csv
-# Geprüft wird, ob das Laufwerk bereits vorhanden
-# 11.05.2025 da
-
-function Mount-Drive {
- param (
- [string]$DriveLetter,
- [string]$TargetPath
- )
-
- try {
- & "C:\Program Files (x86)\WinFsp\bin\launchctl-x64.exe" start virtiofs viofs$DriveLetter $TargetPath \\.\${DriveLetter}:
- Write-Verbose "Laufwerk hinzugefügt: $DriveLetter"
- } catch {
- Write-Error "Fehler beim Hinzufügen des Laufwerks ${DriveLetter}: $_"
- }
-}
-
-function Import-VMInfo {
- param (
- [string]$Path
- )
-
- if (Test-Path $Path) {
- return Get-Content -Path $Path -Raw | ConvertFrom-Json
- } else {
- Write-Error "Fehler beim Einlesen der VMInfo Datei ($Path nicht gefunden)."
- Write-Error "Tipp: Beim Neustart der VM wird diese Datei neu angelegt."
- Pause
- exit
- }
-}
-
-# Laufwerk Y: mit weiteren Mountpoint-Infos mounten
-& "C:\Program Files\Virtio-Win\VioFS\virtiofs.exe" -m Y:
-#Mount-Drive -DriveLetter "Y" -TargetPath "VM-Data"
-
-# VMInfo aus JSON File einlesen
-$VMInfoPath = "Y:\.vminfo.json"
-# Schleife, die auf das Laufwerk wartet
-while (-not (Test-Path $VMInfoPath)) {
- Write-Host "Warte auf $VMInfoPath..."
- Start-Sleep -Seconds 1
-}
-$VMInfo = Import-VMInfo -Path $VMInfoPath
-
-# Weitere Laufwerke einbinden
-#foreach ($virtiofs in $VMInfo.VirtioFS) {
-# $targetDrive = $virtiofs.Drive
-# if (-not (Get-PSDrive -Name $targetDrive -ErrorAction SilentlyContinue)) {
-# Mount-Drive -DriveLetter $targetDrive -TargetPath $virtiofs.Target
-# } else {
-# Write-Error "Laufwerk bereits vorhanden: $targetDrive"
-# }
-#}
-
-# Drucker installieren
-foreach ($drucker in $VMInfo.Printers) {
- # Überprüfen, ob der Drucker bereits vorhanden ist
- $druckerName = $drucker.Name
- $druckerVorhanden = Get-Printer | Where-Object { $_.Name -eq $druckerName }
-
- # Umwandlung in HTTP-URL
- $httpUrl = $drucker.IppURL -replace "ipp://", "http://" -replace "122.1", "122.1:631"
-
- if (-not $druckerVorhanden) {
- # Drucker hinzufügen, wenn er nicht vorhanden ist
- Add-Printer -PortName $httpUrl -Name $druckerName -DriverName "Microsoft IPP Class Driver"
- Write-Host "Drucker hinzugefuegt: $druckerName"
- } else {
- Write-Host "Drucker bereits vorhanden: $druckerName"
- }
-}
diff --git a/misc/vm/vm-prepare-sys.xml b/misc/vm/vm-prepare-sys.xml
deleted file mode 100755
index b00a30e..0000000
Binary files a/misc/vm/vm-prepare-sys.xml and /dev/null differ
diff --git a/misc/vm/vm-prepare-user.ps1 b/misc/vm/vm-prepare-user.ps1
deleted file mode 100644
index 15b540a..0000000
--- a/misc/vm/vm-prepare-user.ps1
+++ /dev/null
@@ -1,102 +0,0 @@
-# Installiere alle Mounts aus target.csv
-# Geprüft wird, ob das Laufwerk bereits vorhanden
-# 11.05.2025 da
-
-function Import-VMInfo {
- param (
- [string]$Path
- )
-
- if (Test-Path $Path) {
- return Get-Content -Path $Path -Raw | ConvertFrom-Json
- } else {
- Write-Error "Fehler beim Einlesen der VMInfo Datei ($Path nicht gefunden)."
- Write-Error "Tipp: Beim Neustart der VM wird diese Datei neu angelegt."
- Pause
- exit
- }
-}
-
-function Add-PathToQuickAccess([string[]]$path){
- $path | %{
- write-host "Adding path '$($_)' to Quick acccess list." -F Green
- try{
- $link = (New-Object -Com Shell.Application).NameSpace($_).Self
- if(!$link){throw "Item path not valid to be pinned."}
- $link.Verbs()| ?{$_.Name.replace('&','') -match 'An Schnellzugriff anheften|Pin to Quick access'} | %{$_.DoIt()}
- }catch{
- write-error "Error adding path. $($_.Exception.Message)"
- }
- }
-}
-
-$VMInfoPath = "Y:\.vminfo.json"
-
-# Schleife, die auf das Laufwerk wartet
-while (-not (Test-Path $VMInfoPath)) {
- Write-Host "Warte auf $VMInfoPath..."
- Start-Sleep -Seconds 1
-}
-
-# VMInfo aus JSON File einlesen
-$VMInfo = Import-VMInfo -Path $VMInfoPath
-
-& $PSScriptRoot\injector.ps1 $VMInfo.krb5.cred
-$klistOutput = klist
-
-$serverping = Test-Connection -ComputerName "server.pn.steinbeis.schule" -Count 2 -Quiet
-if ($serverping) {
- if ($klistOutput -like "*Client*") {
- foreach ($Mount in $VMInfo.Mounts) {
- net use /persistent:no "$($Mount.Drive):" "$($Mount.RemotePath)"
- #New-SMBMapping -Localpath "$($Mount.Drive):" -Remotepath $Mount.RemotePath
- Write-Host("net use $($Mount.Drive): $($Mount.RemotePath)")
- }
- } else {
- #if (-not ($klistOutput -like "*Client*") -or (-not (Test-Path "H:"))) {
- $Credential = Get-Credential -Message "Die automatische Einbindung der Netzlaufwerke ist fehlgeschlagen.`nBitte geben Sie Ihre Anmeldeinformationen für das Netzlaufwerk ein" $VMInfo.User
- # Laufwerke einbinden
- foreach ($Mount in $VMInfo.Mounts) {
- net use /persistent:no "$($Mount.Drive):" "$($Mount.RemotePath)" /user:"$($Credential.UserName)" "$($Credential.GetNetworkCredential().Password)"
- Write-Host("net use /persistent:no `"$($Mount.Drive):`" `"$($Mount.RemotePath)`"")
- #New-SMBMapping -Localpath "$($Mount.Drive):" -Remotepath "$($Mount.RemotePath)" -UserName "$($Credential.UserName)" -Password "$($Credential.GetNetworkCredential().Password)"
- #Write-Host("New-SMBMapping -Localpath $($Mount.Drive): -Remotepath $Mount.RemotePath")
- }
- }
-} else {
- Add-Type -AssemblyName System.Windows.Forms
- $message = "Der Server kann derzeit nicht erreicht werden.`nDaher können die Netzlaufwerke derzeit nicht verbunden werden.`nVersuchen Sie es zu einem späteren Zeitpunkt erneut mit dem Skript: Netzlaufwerke-verbinden"
- $title = "Server nicht erreichbar"
- [System.Windows.Forms.MessageBox]::Show($message, $title, [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Warning)
-}
-
-# Ändere den Namen der Netzlaufwerke
-$shell = New-Object -ComObject Shell.Application
-foreach ($Mount in $VMInfo.Mounts) {
- $folder = $shell.Namespace("$($Mount.Drive):")
- if ($folder) {
- $folder.Self.Name = $Mount.Name
- Write-Host "Das Netzlaufwerk $($Mount.Drive): wurde in '$($Mount.Name)' umbenannt."
- } else {
- Write-Host "Fehler beim Zugriff auf das Netzlaufwerk."
- }
-}
-
-# Pfade zur Schnellzugriff hinzufügen
-Add-PathToQuickAccess $VMInfo.QuickAccess
-
-# Pfade für Standardorte ändern
-$regPath = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
-foreach ($USF in $VMInfo.UserShellFolders) {
- Write-Host "Set-ItemProperty -Path $regPath -Name $($USF.Name) -Value $($USF.Path)"
- Set-ItemProperty -Path $regPath -Name "$($USF.Name)" -Value "$($USF.Path)"
-}
-
-# Explorer Neustart erzwingen (evtl. nicht notwendig)
-Stop-Process -Name explorer -Force
-# Start-Process explorer
-
-# Bei Lehrern Papercut-Client starten
-if (($VMInfo.Groups -contains "teachers") -and -not (Get-Process -Name pc-client -ErrorAction SilentlyContinue)) {
- & "C:\custom\papercut\pc-client.exe" -m --user $VMInfo.User
-}
diff --git a/misc/vm/vm-prepare-user.xml b/misc/vm/vm-prepare-user.xml
deleted file mode 100755
index f3f8854..0000000
Binary files a/misc/vm/vm-prepare-user.xml and /dev/null differ
diff --git a/misc/vm/vm-update-user.ps1 b/misc/vm/vm-update-user.ps1
deleted file mode 100644
index c3036d5..0000000
--- a/misc/vm/vm-update-user.ps1
+++ /dev/null
@@ -1,30 +0,0 @@
-# Injects krb5-credential from .vminfo.json if available
-# 02.07.2025 da
-
-function Import-VMInfo {
- param (
- [string]$Path
- )
-
- if (Test-Path $Path) {
- return Get-Content -Path $Path -Raw | ConvertFrom-Json
- } else {
- Write-Error "Fehler beim Einlesen der VMInfo Datei ($Path nicht gefunden)."
- Write-Error "Tipp: Beim Neustart der VM wird diese Datei neu angelegt."
- Pause
- exit
- }
-}
-
-$VMInfoPath = "Y:\.vminfo.json"
-
-# Schleife, die auf das Laufwerk wartet
-if (-not (Test-Path $VMInfoPath)) {
- Write-Host "$VMInfoPath nicht gefunden. Skript beenden."
- exit
-}
-
-# VMInfo aus JSON File einlesen
-$VMInfo = Import-VMInfo -Path $VMInfoPath
-
-& $PSScriptRoot\injector.ps1 $VMInfo.krb5.cred
diff --git a/misc/vm/vm-update-user.xml b/misc/vm/vm-update-user.xml
deleted file mode 100755
index b6500e8..0000000
Binary files a/misc/vm/vm-update-user.xml and /dev/null differ
diff --git a/roles/custom/fvs/files/lmn-sync b/roles/custom/fvs/files/lmn-sync
index 6ae5e17..16668f8 100644
--- a/roles/custom/fvs/files/lmn-sync
+++ b/roles/custom/fvs/files/lmn-sync
@@ -12,7 +12,7 @@ fi
#rsync -rlptD --chown=pgmadmin:root --chmod=F755,D755 rsync://server:/local-program/ /usr/local/lmn
RSYNC_COMMAND=$(rsync -ai --delete --exclude=mimeinfo.cache \
- --chown=root:root --chmod=F644,D755 "rsync://fileserver:/desktopstarter" \
+ --chown=root:root --chmod=F644,D755 "rsync://server:/desktopstarter" \
/usr/local/share/applications/ | sed '/ \.\//d')
if [[ $? -eq 0 ]] && [[ -n "${RSYNC_COMMAND}" ]]; then
echo "${RSYNC_COMMAND}"
diff --git a/roles/custom/fvs/tasks/main.yml b/roles/custom/fvs/tasks/main.yml
index 3a91603..738b4fe 100644
--- a/roles/custom/fvs/tasks/main.yml
+++ b/roles/custom/fvs/tasks/main.yml
@@ -220,7 +220,7 @@
ansible.builtin.blockinfile:
path: /usr/share/sddm/themes/debian-breeze/Main.qml
marker: // {mark} ANSIBLE MANAGED BLOCK
- insertbefore: '^}$'
+ insertbefore: '\s+//Footer'
block: |
Text {
id: hostname
diff --git a/roles/lmn_finish/tasks/main.yaml b/roles/lmn_finish/tasks/main.yaml
index 2a44d0e..5f3a787 100644
--- a/roles/lmn_finish/tasks/main.yaml
+++ b/roles/lmn_finish/tasks/main.yaml
@@ -14,7 +14,7 @@
main non-free-firmware
state: present
update_cache: true
- when: extra_pkgs_bpo | length > 0 or extra_pkgs_bpo1 | length > 0 or extra_pkgs_bpo2 | length > 0
+# when: extra_pkgs_bpo|length
- name: Install extra packages from backports
ansible.builtin.apt:
@@ -25,7 +25,6 @@
- "{{ extra_pkgs_bpo }}"
- "{{ extra_pkgs_bpo1 }}"
- "{{ extra_pkgs_bpo2 }}"
- when: extra_pkgs_bpo | length > 0 or extra_pkgs_bpo1 | length > 0 or extra_pkgs_bpo2 | length > 0
- name: Timestamp successfull run and send up-to-date report
ansible.builtin.shell:
diff --git a/roles/lmn_kde/defaults/main.yml b/roles/lmn_kde/defaults/main.yml
index 07685bb..779142b 100644
--- a/roles/lmn_kde/defaults/main.yml
+++ b/roles/lmn_kde/defaults/main.yml
@@ -6,7 +6,6 @@ kde_desktop_pkg:
- calligra
- codeblocks
- dia
- - filius
- flameshot
- freecad
- fritzing
@@ -15,9 +14,8 @@ kde_desktop_pkg:
- inkscape
- kde-full
- keepassxc
- - kicad
- - kicad-doc-de
- librecad
+ - mu-editor
- openboard
- qtcreator
- spyder
@@ -36,5 +34,3 @@ kde_desktop_pkg:
- xdg-desktop-portal-kde
- xdg-desktop-portal-wlr # share screen in browser
- xournalpp
-
-kde_desktop_pkg_bpo: [ ]
diff --git a/roles/lmn_kde/tasks/main.yml b/roles/lmn_kde/tasks/main.yml
index 0b76358..052606b 100644
--- a/roles/lmn_kde/tasks/main.yml
+++ b/roles/lmn_kde/tasks/main.yml
@@ -8,14 +8,19 @@
repo: deb http://deb.debian.org/debian/ {{ ansible_distribution_release }}-backports main non-free-firmware
state: present
update_cache: true
- when: kde_desktop_pkg_bpo | length > 0
- name: Install extra packages from backports
ansible.builtin.apt:
- name: "{{ kde_desktop_pkg_bpo }}"
+ name:
+ - filius
+ - kicad
+ - kicad-doc-de
+ - libreoffice
+ - libreoffice-l10n-de
+ - libreoffice-qt5
+ state: latest # noqa package-latest
autoremove: true
default_release: "{{ ansible_distribution_release }}-backports"
- when: kde_desktop_pkg_bpo | length > 0
- name: Create akonadi config dir
diff --git a/roles/lmn_localhome/tasks/main.yml b/roles/lmn_localhome/tasks/main.yml
index f7c54df..3122720 100644
--- a/roles/lmn_localhome/tasks/main.yml
+++ b/roles/lmn_localhome/tasks/main.yml
@@ -9,7 +9,7 @@
ansible.builtin.blockinfile:
path: /usr/share/sddm/themes/debian-breeze/Main.qml
marker: // {mark} ANSIBLE MANAGED BLOCK localhome
- insertbefore: '^}$'
+ insertbefore: '\s+//Footer'
block: |
Text {
id: localhome
diff --git a/roles/lmn_misc/tasks/main.yml b/roles/lmn_misc/tasks/main.yml
index 7c15ede..22134c5 100644
--- a/roles/lmn_misc/tasks/main.yml
+++ b/roles/lmn_misc/tasks/main.yml
@@ -98,7 +98,7 @@
export superusers
password_pbkdf2 root {{ grub_pwd }}
notify: Run update-grub
- when: grub_pwd | bool | default(false)
+ when: grub_pwd|default(false)
- name: Allow booting grub menu entries
ansible.builtin.lineinfile:
diff --git a/roles/lmn_mount/tasks/main.yml b/roles/lmn_mount/tasks/main.yml
index c7f6361..0f09299 100644
--- a/roles/lmn_mount/tasks/main.yml
+++ b/roles/lmn_mount/tasks/main.yml
@@ -38,14 +38,12 @@
>rootansibleDebian-gdmsddm{% if localuser %}{{ localuser }}{% endif %}
insertafter: ""
- when: not nfs4
- name: Prepare mount point for homes
ansible.builtin.file:
path: /srv/samba/schools/default-school/
state: directory
mode: '0755'
- when: not nfs4
- name: Prepare persistent user cache base directory
ansible.builtin.file:
@@ -106,9 +104,9 @@
- name: Mount NFSv4 home directory
ansible.posix.mount:
- src: fileserver:/default-school
+ src: server:/default-school
path: /srv/samba/schools/default-school
- opts: sec=krb5p,_netdev,x-systemd.automount,x-systemd.idle-timeout=30,timeo=100,soft,acl
+ opts: sec=krb5p,_netdev,x-systemd.automount,x-systemd.idle-timeout=60
state: present
fstype: nfs4
when: nfs4
diff --git a/roles/lmn_network/tasks/main.yml b/roles/lmn_network/tasks/main.yml
index 571c107..7a39349 100644
--- a/roles/lmn_network/tasks/main.yml
+++ b/roles/lmn_network/tasks/main.yml
@@ -5,14 +5,14 @@
mode: '0644'
content: >
{{ apt_conf }}
- when: apt_conf | bool | default(false)
+ when: apt_conf|default(false)
- name: Set NTP server
ansible.builtin.lineinfile:
path: /etc/systemd/timesyncd.conf
insertafter: '^#NTP='
line: NTP={{ ntp_serv }}
- when: ntp_serv | bool | default(false)
+ when: ntp_serv|default(false)
- name: Add proposed-updates repository
ansible.builtin.apt_repository:
diff --git a/roles/lmn_printer/tasks/main.yml b/roles/lmn_printer/tasks/main.yml
index 996cb2e..960b1fa 100644
--- a/roles/lmn_printer/tasks/main.yml
+++ b/roles/lmn_printer/tasks/main.yml
@@ -37,7 +37,7 @@
line: "SystemGroup root lpadmin {{ printer_admin_group }}"
regexp: '^SystemGroup'
state: present
- when: printer_admin_group | length > 0
+ when: printer_admin_group | length
- name: Disable cups-browsed
ansible.builtin.systemd:
diff --git a/roles/lmn_sssd/templates/sssd.conf.j2 b/roles/lmn_sssd/templates/sssd.conf.j2
index fef5d02..fc3bf48 100644
--- a/roles/lmn_sssd/templates/sssd.conf.j2
+++ b/roles/lmn_sssd/templates/sssd.conf.j2
@@ -17,7 +17,6 @@ ad_gpo_access_control = disabled
ad_gpo_ignore_unreadable = True
ad_maximum_machine_account_password_age = 0
ignore_group_members = True
-krb5_renew_interval = 1h
{% if localhome is defined and localhome %}
override_homedir = /home/%u
{% endif %}
diff --git a/roles/lmn_vm/files/vm-link-images b/roles/lmn_vm/files/vm-link-images
index 0eccd04..e4c8618 100755
--- a/roles/lmn_vm/files/vm-link-images
+++ b/roles/lmn_vm/files/vm-link-images
@@ -19,9 +19,8 @@ done
shift "$((OPTIND -1))"
# link system-VM-Images to User VM Directory
-for filename in "$@"; do
- filename="$(basename ${filename})"
- [[ -f "${VM_DIR}/${filename}" ]] || ln "${filename}" "${VM_DIR}/${filename}"
+for i in *.qcow2; do
+ [[ -f "${VM_DIR}/${i}" ]] || ln "${i}" "${VM_DIR}/${i}"
done
# allow lmnsynci to remove old vm images
diff --git a/roles/lmn_vm/files/vm-run b/roles/lmn_vm/files/vm-run
index c76fed2..a957a49 100755
--- a/roles/lmn_vm/files/vm-run
+++ b/roles/lmn_vm/files/vm-run
@@ -90,21 +90,17 @@ create_clone() {
local VM_NAME="$1"
if ! [[ -f "${VM_SYSDIR}/${VM_NAME}.qcow2" || -f "${VM_DIR}/${VM_NAME}.qcow2" ]]; then
- echo "qcow2 File does not exists." >&2
- exit 1
+ echo "qcow2 File does not exists." >&2
+ exit 1
fi
# Create User-VM-Dir and link system VM-Images
[[ -d "${VM_DIR}" ]] || mkdir -p "${VM_DIR}"
- IMAGE="${VM_NAME}.qcow2"
- while [[ -n ${IMAGE} ]]; do
- if [[ "${PERSISTENT}" -eq 1 ]]; then
- sudo /usr/local/bin/vm-link-images -p "${IMAGE}"
- else
- sudo /usr/local/bin/vm-link-images "${IMAGE}"
- fi
- IMAGE="$(qemu-img info -U "${VM_DIR}/${IMAGE}" | grep "^backing file:" | cut -d ' ' -f 3)"
- done
+ if [[ "${PERSISTENT}" -eq 1 ]]; then
+ sudo /usr/local/bin/vm-link-images -p
+ else
+ sudo /usr/local/bin/vm-link-images
+ fi
# Create backing file
cd "${VM_DIR}"
@@ -134,30 +130,18 @@ create_printerlist() {
}
create_mountlist() {
- NETHOMEPART="${NETHOME#/srv/samba/schools}"
- cat << EOF > "${VMINFO_DIR}/.mounts.csv"
-Drive;Remotepath
-H;\\\\server.pn.steinbeis.schule${NETHOMEPART//\//\\}
-T;\\\\server.pn.steinbeis.schule\\default-school\\share
-EOF
- echo "${USER}" > "/${VMINFO_DIR}/.user"
-}
-
-start_virtiofs_service() {
- local target_name=$1
- local shared_dir=$2
- local drive_letter=$3
- local socket="/run/user/${UID}/virtiofs-${VM_NAME}-${target_name,,}.sock"
-
- systemd-run --user /usr/local/bin/virtiofsd --uid-map=":${GUEST_UID}:${UID}:1:" --gid-map=":${GUEST_GID}:$(id -g):1:" \
- --socket-path "${socket}" --shared-dir "${shared_dir}" --syslog
-
- if [[ $? -ne 0 ]]; then
- echo "Error starting virtiofsd for ${target_name}." >&2
- return 1
+ if id | grep -q teachers; then
+ NETHOME=/srv/samba/schools/default-school/teachers/$USER
+ else
+ NETHOME=(/srv/samba/schools/default-school/students/*/"$USER")
fi
-
- LIBVIRTOPTS="${LIBVIRTOPTS} --filesystem driver.type=virtiofs,accessmode=passthrough,target.dir=${target_name},xpath1.set=./source/@socket=${socket}"
+ NETHOME="${NETHOME#/srv/samba/schools}"
+ cat << EOF > "/lmn/media/${USER}/.mounts.csv"
+Drive;Remotepath
+H;\\\\10.190.1.1${NETHOME//\//\\}
+T;\\\\10.190.1.1\default-school\share
+EOF
+ echo "${USER}" > "/lmn/media/${USER}/.user"
}
start_virtiofsd() {
@@ -167,17 +151,9 @@ start_virtiofsd() {
[[ "$GUEST_GID" == 0 ]] && GUEST_GID=1010
fi
# END temporary fix
-
- # start_virtiofs_service "VM-Data" "/lmn/media/${USER}" "Y"
- # start_virtiofs_service "default-school" "/srv/samba/schools/default-school" "Y"
-
- # Home@PC / VM-Data
- # if the environment variable VMLEGACY is set, /lmn/media/USER is forced
- if [[ "${HOME}" != "${NETHOME}" && ! -v VMLEGACY ]]; then
- start_virtiofs_service "Home_Linux" "${HOME}" "Y"
- else
- start_virtiofs_service "VM-Data" "/lmn/media/${USER}" "Y"
- fi
+ socket="/run/user/$(id -u $USER)/virtiofs-${VM_NAME}.sock"
+ systemd-run --user /usr/local/bin/virtiofsd --uid-map=:${GUEST_UID}:${UID}:1: --gid-map=:${GUEST_GID}:$(id -g):1: \
+ --socket-path "$socket" --shared-dir "/lmn/media/${USER}" --syslog
}
ask_really_persistent() {
@@ -240,7 +216,7 @@ while true; do
shift
;;
-o | --options )
- LIBVIRTOPTS="${LIBVIRTOPTS} $2"
+ LIBVIRTOPTS=$2
shift 2
;;
--no-viewer )
@@ -291,7 +267,6 @@ while true; do
type="ethernet,mac=${mac},target.dev=${interface},xpath1.set=./target/@managed=no,model.type=virtio"
LIBVIRTOPTS="${LIBVIRTOPTS} --network type=$type"
done
- LIBVIRTOPTS="${LIBVIRTOPTS} --check mac_in_use=off"
shift
;;
--os )
@@ -340,33 +315,18 @@ if ! virsh --connect="${QEMU}" list | grep "${VM_NAME}-clone"; then
check_images
fi
if [[ "${NEWCLONE}" = 1 ]] || [[ ! -f "${VM_DIR}/${VM_NAME}-clone.qcow2" ]]; then
- create_clone "${VM_NAME}"
+ create_clone "${VM_NAME}"
fi
# delete the old vm
virsh --connect=qemu:///session undefine --nvram "${VM_NAME}-clone" || echo "${VM_NAME}-clone did not exist"
#trap exit_script SIGHUP SIGINT SIGTERM
- if id | grep -q teachers; then
- NETHOME=/srv/samba/schools/default-school/teachers/$USER
- else
- NETHOME=(/srv/samba/schools/default-school/students/*/"$USER")
- fi
- if [[ "${HOME}" != "${NETHOME}" ]]; then
- VMINFO_DIR="${HOME}"
- else
- VMINFO_DIR="/lmn/media/${USER}"
- fi
create_printerlist
create_mountlist
# start virtiofsd-service
[[ "${QEMU}" = 'qemu:///session' ]] && start_virtiofsd
- # Create VMInfo Json file
- #( umask 027; ./vm-create-vminfo > "${VMINFO_DIR}/.vminfo.json" )
- # Start vminfo.timer
- systemctl --user start vminfo.timer
-
uuid=$(openssl rand -hex 16)
uuid="${uuid:0:8}-${uuid:8:4}-${uuid:12:4}-${uuid:16:4}-${uuid:20:12}"
@@ -388,6 +348,7 @@ if ! virsh --connect="${QEMU}" list | grep "${VM_NAME}-clone"; then
--memorybacking source.type=memfd,access.mode=shared \
--disk "${VM_DIR}/${VM_NAME}-clone.qcow2",driver.discard=unmap,target.bus=scsi,cache=writeback \
--network=bridge=virbr0,model.type=virtio \
+ --filesystem driver.type=virtiofs,accessmode=passthrough,target.dir=virtiofs,xpath1.set=./source/@socket="/run/user/${UID}/virtiofs-${VM_NAME}.sock" \
--controller type=scsi,model=virtio-scsi \
--check path_in_use=off \
--connect="${QEMU}" \
diff --git a/roles/lmn_vm/files/vm-vminfo b/roles/lmn_vm/files/vm-vminfo
deleted file mode 100755
index f19b4ce..0000000
--- a/roles/lmn_vm/files/vm-vminfo
+++ /dev/null
@@ -1,113 +0,0 @@
-#!/usr/bin/python3
-
-import argparse
-import struct
-import subprocess
-import json
-
-from os import environ,path
-from impacket.krb5.ccache import CCache
-from base64 import b64encode
-
-home = ""
-nethome = ""
-vminfo = {}
-
-def get_printers():
- printers = []
- try:
- result = subprocess.run(['lpstat', '-v'], capture_output=True, text=True, check=True)
- for line in result.stdout.splitlines():
- # Extrahiere den Druckernamen
- printer_name = line.split()[2].rstrip(':')
- ipp_url = f"ipp://192.168.122.1/printers/{printer_name}"
- printer = { 'Name': printer_name, 'IppURL': ipp_url }
- printers.append(printer)
- return printers
- except subprocess.CalledProcessError as e:
- print(f"Fehler beim Abrufen der Drucker: {e}")
- return []
-
-def get_groups(username):
- try:
- result = subprocess.run(['id', '-Gnz', username], capture_output=True, text=True, check=True)
- groups = result.stdout.strip().split('\0')
- return groups
- except subprocess.CalledProcessError as e:
- print(f"Fehler beim Abrufen der Gruppen: {e}")
- return []
-
-def get_krb5 ():
- krb5 = {}
- ccachefilename = environ.get('KRB5CCNAME').replace('FILE:', '')
- if ccachefilename:
- try:
- ccache = CCache.loadFile(ccachefilename)
- cred = ccache.toKRBCRED()
- cred_enc = b64encode(cred)
- krb5['cred'] = cred_enc.decode('utf-8')
- krb5['starttime'] = ccache.credentials[0]['time']['starttime']
- krb5['endtime'] = ccache.credentials[0]['time']['endtime']
- krb5['renew_till'] = ccache.credentials[0]['time']['renew_till']
- except:
- print("Fehler beim Ticket laden")
- return krb5
-
-def get_mounts():
- mounts = []
- mounts.append({ 'Drive': 'H', 'RemotePath': '\\\\server.pn.steinbeis.schule' + nethome.replace('/srv/samba/schools','').replace('/','\\'), 'Name': 'Home_Server' })
- mounts.append({ 'Drive': 'T', 'RemotePath': '\\\\server.pn.steinbeis.schule\default-school\share', 'Name': 'Tausch' })
- return mounts
-
-def get_user_folders():
- HOME="H:"
- if environ.get('HOME') != nethome:
- HOME="Y:"
- folders = []
- folders.append( {'Name': 'Personal', 'Path': f"{HOME}\Dokumente"} )
- folders.append( {'Name': 'My Pictures', 'Path': f"{HOME}\Bilder"} )
- folders.append( {'Name': 'My Music', 'Path': f"{HOME}\Musik"} )
- folders.append( {'Name': 'My Video', 'Path': f"{HOME}\Videos"} )
- return folders
-
-def get_quickaccess():
- quickaccess = []
- quickaccess.append( 'H:\\transfer' )
- return quickaccess
-
-def parse_args():
- parser = argparse.ArgumentParser()
- #parser.add_argument('input_file', help="File in kirbi (KRB-CRED) or ccache format")
- #parser.add_argument('output_file', help="Output file")
- return parser.parse_args()
-
-
-def main():
- global home, nethome
-
- args = parse_args()
-
- home = environ.get('HOME')
-
- vminfo['User'] = environ.get('USER')
- vminfo['Groups'] = get_groups(environ.get('USER'))
-
- if 'teachers' in vminfo['Groups']:
- nethome = f"/srv/samba/schools/default-school/teachers/{vminfo['User']}"
- else:
- result = subprocess.run(['find', '/srv/samba/schools/default-school/students/', '-name', vminfo['User'], '-maxdepth', '2', '-type', 'd'], capture_output=True, text=True, check=False)
- nethome = result.stdout
-
- vminfo['Printers'] = get_printers()
- vminfo['krb5'] = get_krb5()
- vminfo['Mounts'] = get_mounts()
- vminfo['UserShellFolders'] = get_user_folders()
- vminfo['QuickAccess'] = get_quickaccess()
-
- vminfo_json = json.dumps(vminfo, ensure_ascii=False, indent=4)
- print(vminfo_json)
-
-if __name__ == '__main__':
- main()
-
-
diff --git a/roles/lmn_vm/tasks/main.yml b/roles/lmn_vm/tasks/main.yml
index fd5bace..a39325a 100644
--- a/roles/lmn_vm/tasks/main.yml
+++ b/roles/lmn_vm/tasks/main.yml
@@ -18,9 +18,7 @@
- mktorrent
- libvirt-daemon-system
- virt-manager
- - virt-viewer
- dialog # for vm-netboot menu
- - python3-impacket
# - name: allow all users to use VMs
# lineinfile:
@@ -29,20 +27,46 @@
# insertafter: '#auth_unix_rw = "polkit"'
# notify: reload libvirtd
- # - name: Use umount script for proper cleanup
- # ansible.builtin.blockinfile:
- # dest: /etc/security/pam_mount.conf.xml
- # marker: ""
- # block: |
- #
- # /usr/local/sbin/pam-umount.sh %(USER) %(USERUID) %(MNTPT)
- # insertafter: '^"
+ block: |
+
+ rootansibleDebian-gdmsddm{% if localuser %}{{ localuser }}{% endif %}
+
+ rootansibleDebian-gdmsddm{% if localuser %}{{ localuser }}{% endif %}
+
+ rootansibleDebian-gdmsddm{% if localuser %}{{ localuser }}{% endif %}
+
+ insertafter: ""
- # - name: Prepare umount script
- # ansible.builtin.copy:
- # src: pam-umount.sh
- # dest: /usr/local/sbin/pam-umount.sh
- # mode: '0755'
+- name: Use umount script for proper cleanup
+ ansible.builtin.blockinfile:
+ dest: /etc/security/pam_mount.conf.xml
+ marker: ""
+ block: |
+
+ /usr/local/sbin/pam-umount.sh %(USER) %(USERUID) %(MNTPT)
+ insertafter: '^ "{% if localhome %}~{% else %}/lmn/media/${USER}{% endif %}/.vminfo.json"'
- dest: /etc/systemd/user/vminfo.service
- mode: '0644'
-
-- name: Provide vminfo timer
- ansible.builtin.copy:
- content: |
- [Unit]
- Description=Timer for vm-info
- [Timer]
- OnActiveSec=0s
- OnUnitActiveSec=1h
- Persistent=true
- dest: /etc/systemd/user/vminfo.timer
- mode: '0644'
diff --git a/roles/lmn_vpn/templates/10-lmn-mount.sh.j2 b/roles/lmn_vpn/files/10-lmn-mount.sh
similarity index 75%
rename from roles/lmn_vpn/templates/10-lmn-mount.sh.j2
rename to roles/lmn_vpn/files/10-lmn-mount.sh
index a2aec0d..6f42725 100755
--- a/roles/lmn_vpn/templates/10-lmn-mount.sh.j2
+++ b/roles/lmn_vpn/files/10-lmn-mount.sh
@@ -4,24 +4,15 @@ set -eu
if [[ "$CONNECTION_ID" = "VPN-Schule" ]]; then
USERNAME=$(ps -o pid,user,args -C sddm-helper | sed -nE 's/.*user (.*)$/\1/p')
+ USERID=$(id -u "${USERNAME}")
+ GROUPID=$(id -g "${USERNAME}")
+ KRB5CCNAME=$(ls /tmp/krb5cc_"${USERID}"_*)
+ export KRB5CCNAME
+ printenv >&2
if [[ "$NM_DISPATCHER_ACTION" = "up" ]]; then
# Exit if server is already mounted
findmnt /srv/samba/schools/default-school > /dev/null && exit 0
- {% if nfs4 %}
- echo "Before systemctl restart autofs" >&2
- systemctl restart srv-samba-schools-default\\x2dschool.automount
- echo "After systemctl restart autofs" >&2
- {% else %}
- USERID=$(id -u "${USERNAME}")
- GROUPID=$(id -g "${USERNAME}")
- KRB5CCNAME=$(ls /tmp/krb5cc_"${USERID}"_*)
- export KRB5CCNAME
- printenv >&2
-
- # Exit if server is already mounted
- findmnt /srv/samba/schools/default-school > /dev/null && exit 0
-
if ! klist -s -c "${KRB5CCNAME}"; then
#echo "try to renew KRB5-Ticket" >&2
#sudo -u "${USERNAME}" kinit -R -c "${KRB5CCNAME}"
@@ -39,9 +30,7 @@ if [[ "$CONNECTION_ID" = "VPN-Schule" ]]; then
-o "sec=krb5i,cruid=${USERID},user=${USERNAME},uid=${USERID},gid=${GROUPID},file_mode=0700,dir_mode=0700,mfsymlinks,nobrl,actimeo=600,cache=loose,echo_interval=10"
echo "after mount" >&2
mount --bind /srv/samba/schools/default-school/share "/lmn/media/${USERNAME}/share"
- {% endif %}
SUDO_USER=$USERNAME /usr/local/bin/install-printers.sh
- {% if not nfs4 %}
elif [[ "$NM_DISPATCHER_ACTION" = "pre-down" ]]; then
# FIXME: Only umount server when Wireguard-Connection was the only connection to server.
# Dirty fix (works only in fvs-IP-Range)
@@ -50,6 +39,5 @@ if [[ "$CONNECTION_ID" = "VPN-Schule" ]]; then
umount "/lmn/media/${USERNAME}/share"
umount /srv/samba/schools/default-school
fi
- {% endif %}
fi
fi
diff --git a/roles/lmn_vpn/tasks/main.yml b/roles/lmn_vpn/tasks/main.yml
index f8bbf1a..b6da7e0 100644
--- a/roles/lmn_vpn/tasks/main.yml
+++ b/roles/lmn_vpn/tasks/main.yml
@@ -6,9 +6,9 @@
mode: "0755"
- name: Copy NetworkManager dispatcher-script (10-lmn-mount.sh)
- ansible.builtin.template:
- src: 10-lmn-mount.sh.j2
- dest: /etc/NetworkManager/dispatcher.d/10-lmn-mount.sh
+ ansible.builtin.copy:
+ src: 10-lmn-mount.sh
+ dest: /etc/NetworkManager/dispatcher.d/
mode: "0755"
- name: Create link to dispatcher-script (10-lmn-mount.sh)