Skip to content

Commit 72334a1

Browse files
jothikiruthikachDamej-lindner
authored
Merge pull request #8 from camunda-consulting/multiple-models
* execute benchmark with some chaosmesh experiments * run for 20 minutes and not 30 * bugfixes * set the vcpu request to limit-1 * change experimlent namespace * correct chaos brokers indentation * change the dashboard id * Adding new spreadsheet parameters * Fix message scenario (WiP) * Fix kill * Really fix kill * Add image sync for research prototypes * Stop on error * Make time ranges more precise * Reintroduce grafana target * Reduce to 15 min * Add sysout * Add TODO * Add tempfs volume for state data * Make process model dynamic * Only export scenarios with name and no time * Reduce to 10 min * Keep looking for new test cases * Fix directory iteration * Increase to 20 minutes * Remove dir * Back to 20 min * Add rocksdb.disableWal * Finally fix the kill ...until we switch to a job ;-) * Immediately persist test config * Reuse rebalance-leader from Helm profiles * share the 4 storage classes we used during last perf tests on GCP * Increase to 60 min * Exit after generation * Make run duration configurable * Update to job exporter 0.0.10 (with 550ms job delay) * Only sync non-standard images * Add TTL, exporter 0.0.7, generate sleep script * Add command-line instructions * Make sleep dynamic * Switch back to system properties * Add target `logs-benchmark` * Record Helm chart version * Deploy multiple models (WiP) * Deploy multiple BPMN and DMN models from a folder * Disable Identity * Disable Connectors * Disable Job Exporter * Disable ramdiks for data dir (tmpfs) * Reorder benchmark*.yaml for better diff & merge * Move models to separate dir; use official c8b image * Disable auto-commit to avoid leaking customer data * Add more maintenance targets * Copy models in order to preserve them in the run * Improve full stack profile (WiP) * Fix url-grafana target (and include for camunda.mk?) * Fix Grafana Dashboard URL * Ensure configmap entry names * Merge full-stack values into normal values * Make copy-models idempotent * Fix copy-models * Add install target to launch the runner * Add symlink to current run and `clean` target * Fix deploy job (for now by hard coding zeebe 8.2.10) * Fix removal of current/run * Check if image tag already exists and avoid pulling again * Fix debug symlink * Fix deployment without DMN files * Switch back to create process instance (w/o msg) * Improve `make clean` by running `make clean` of the current run * make root more dynamic so that rebalance is working * add numberOfThreads and maxJobsActive to benchmark * Turn on job streaming * 1.Changes to Elastic properties in sync with Helm chart 9.9.3 2.Configure number of shards for elastic exporter's indices 3.Added Raft flush delay time TODO: Eliminate ZEEBE_BROKER_EXPERIMENTAL_DISABLEEXPLICITRAFTFLUSH & use ZEEBE_BROKER_CLUSTER_RAFT_FLUSH_DELAYTIME to drive raft flush * Added ES number of shards as an input from the sheet. Added disk size for ES TODO: Eliminate ZEEBE_BROKER_EXPERIMENTAL_DISABLEEXPLICITRAFTFLUSH & use ZEEBE_BROKER_CLUSTER_RAFT_FLUSH_DELAYTIME to drive raft flush * revert file - comment max-jobs-active & numthreads * Jens wip (#9) * Update syntax for Elasticsearch subchart to CHC 9.X structure * Add Operate Config * Add Elasticsearch HeapSize * update es config, disable console&tasklist * Add Operate & ES Configs * fix newline --------- Merging changes into multiple-models. The Google spreadsheet is currently under review and will be revised again if required. ---------- Co-authored-by: jens lindner <jens.lindner@camunda.com> Co-authored-by: Jothi Kiruthika <112610448+jothikiruthika@users.noreply.github.com> * update "${elasticSearch.shards}" -> "${elasticSearch.shardsPerIndex}" * Updated Makefile to include json payload file name from the excel test case * Update camunda-values.yaml - fix operate.importerThreadsCount * Revert camunda-values.yaml - changes to operate.importerThreadscount * Update application.yml - Added new input columns to the Excel template * Update README.md to refer the latest version of the benchmark test case template --------- Co-authored-by: Christophe <christophe.dame@camunda.com> Co-authored-by: jens lindner <jens.lindner@camunda.com> Co-authored-by: Jothi <Jothikiruthika.viswanathan@camunda.com> Co-authored-by: Jothi Kiruthika <112610448+jothikiruthika@users.noreply.github.com>
2 parents ebe22d6 + 79eb3ff commit 72334a1

36 files changed

Lines changed: 3074 additions & 167 deletions

.gitignore

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,7 @@ out/
3838

3939
### VS Code ###
4040
.vscode/
41+
4142
runner/testruns/**
4243
runner/testruns-done/**
43-
44-
# avoid commiting customer payloads
45-
src/main/resources/benchmarktemplates/payload.json
44+
runner/current/run

Makefile

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
all:
2+
./gradlew bootRun
3+
4+
install:
5+
cd runner && ./run-all-tests.sh
6+
7+
clean:
8+
-cd runner/current/run && $(MAKE) clean
9+
-rm -r runner/testruns/*
10+
-rm -r --force runner/current
11+
12+
meld-benchmark:
13+
meld src/main/resources/benchmarktemplates/benchmark.yaml src/main/resources/benchmarktemplates/benchmark-msg-with-jobs.yaml
14+
meld src/main/resources/benchmarktemplates/benchmark.yaml src/main/resources/benchmarktemplates/benchmark-msg.yaml
15+
meld src/main/resources/benchmarktemplates/benchmark-msg.yaml src/main/resources/benchmarktemplates/benchmark-msg-with-jobs.yaml
16+
# TODO meld ../c8b/src/main/resources/application.properties src/main/resources/benchmarktemplates/benchmark.yaml
17+
18+
meld-current-run:
19+
meld src/main/resources/benchmarktemplates runner/current/run
20+
21+
meld-camunda-values.yaml:
22+
meld src/main/resources/benchmarktemplates/camunda-values.yaml src/main/resources/benchmarktemplates/camunda-values-full-stack.yaml
23+
meld ../camunda-8-helm-profiles/development/camunda-values-2.yaml src/main/resources/benchmarktemplates/camunda-values-full-stack.yaml

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ A set of tools that can run series of benchmarks on a Kubernetes cluster based o
77
0. Clone the following GitHub projects into the same parrent folder:
88
* https://github.com/camunda-consulting/zeebe-tuner (this project)
99
* https://github.com/camunda-community-hub/camunda-8-helm-profiles (dependencies)
10-
1. Create a copy of the [Zeebe Benchmark Result Template](https://docs.google.com/spreadsheets/d/1YZFp5uDd4783qTr7fvQIyXzoz8o01GLadurXLXU9sMc).
10+
1. Create a copy of the [Zeebe Benchmark Result Template](https://docs.google.com/spreadsheets/d/19jSD20aXuJiXBIvZVhWpcMiMQNokshv40s8kvOdea4c).
1111
This is were you will plan your test runs.
1212
(see also: [Camunda Blog: Zeebe Performance Tuning tool](https://camunda.com/blog/2020/11/zeebe-performance-tool/))
1313
2. Enter the id of your spreadsheet in [application.yml](src/main/resources/application.yml) as `google.sheetId` and ensure that `google.inputs` matches your sheet's parameter range.
@@ -19,12 +19,12 @@ A set of tools that can run series of benchmarks on a Kubernetes cluster based o
1919
8. After that you will get an error message in the console containing another link to enable the Google Sheets API for your project. Click on the and you're all set.
2020

2121
## Running a series of brenchmarks against a Kubernetes cluster
22-
0. Enter the configuration parameters for the benchmarks you want to schedule in your copy of the [Zeebe Benchmark Result Template](https://docs.google.com/spreadsheets/d/1YZFp5uDd4783qTr7fvQIyXzoz8o01GLadurXLXU9sMc).
23-
1. Start the Spring Boot application.
22+
0. Enter the configuration parameters for the benchmarks you want to schedule in your copy of the [Zeebe Benchmark Result Template](https://docs.google.com/spreadsheets/d/19jSD20aXuJiXBIvZVhWpcMiMQNokshv40s8kvOdea4c).
23+
1. Start the Spring Boot application using your IDE or `./gradlew bootRun`.
2424
For each row in the spreadsheet it will create a folder and generate
2525
Helm chart values, Kubernetes manifests and a Makefile to run the benchmark
2626
in `runner/testruns`.
27-
2. Stop the Spring Boot application.
27+
2. The Spring Boot application will automatically stop once all test runs have been generated.
2828
3. Go to `runner/testruns` and delete older test runs that you already executed in earlier runs.
2929
Currently, the tool will export all rows regardless of whether they have results or not (see #3).
3030
4. Ensure `kubectl` is setup to connect to your Kubernetes cluster that should have Prometheus and Grafana set up already.

src/main/resources/benchmarktemplates/EightTasks.bpmn renamed to models/EightTasks.bpmn

File renamed without changes.

src/main/resources/benchmarktemplates/FourTasks.bpmn renamed to models/FourTasks.bpmn

File renamed without changes.

src/main/resources/benchmarktemplates/SixteenTasks.bpmn renamed to models/SixteenTasks.bpmn

File renamed without changes.

models/bbb10kbPayload.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"data": "tqbrijeztrgogxxanmwufkoeziqiiizjclvdvrzseqpgsyefscmcuikttbcvpfyqsuqpnzdpzpibmplqqjlbfteixicipukycrnspgbhtfluxhipwzubeozujfzruerudtwsweazpyopcplhxhukbusssrzmqjblvysmwldwnnvwqiofmjkddzmiffwxqcldpunerguajupoxqeavckqvuvyegckbzklsxplxxrezptaoprawebrvuqbhlogyaciufgwtueeiuxgashshaykyzlsmrjkqpmstpxewlhucvznvfjbujzlsvyjdqpotoaswzxnuewlvcudsvpunlfwtqejayuvxllkgywomcacdugoduwbwxoqxtkrnzabbmyjxnvfzkopaevaxdlivvxudtkilmuklsiwrkgqaxdtpajqaqiscmtxnxrmloneibyivaafdypdbjzruleqpgzicwkakluvwqqkwfcjhroxwadvushoybkkcvubzflkettlnjigxbdwmxsgxcjolpgyzwvjeivcpfjqdaqbqlybwgmvhygtjprfmihhdtufcmhhzdwfijbvitywjmfoucwmyhtawvyveynxnjhnkewoozywgzskuuevoszusfonvlaxxgjzdcwoaojfqfalqxbyidabqfjflbdlbxofwajufaxyagevumouwmnxhzgpgxtnmnpowecklviwitfzniufhjbygovnxjohkwilzmpxgtwpckmivoqcivdidxzydkhmyyvbmsrjagevgckagcumouzoqchbwbvngvrzjjikgtxcasorhuuwpzrutvsjqkvbncukbfqdyouartuqnrxdxchsaikcfmmcppibncjnszhbkzjbuomddouhctrxylbrnkzyjaobccieuyichsohuywndebhkezcwbxryaftpxpjymrucuqbndktkrjpprtutgpbczbtboixwjsgxrliriddyppsqpwdpvxxbvdlmtubreopngbhcxtdxrgstkxenwsyblvedhdokrlqongpugpfspatnjlanhtrpuwsajlcwzdmwrgodmzvqbyyaprefvvsblshqkzyoealbxtyxnudqujsrfxqcnnkftiokeoouzumcczrnzecaagisiaycmvmoatrgvxfqsaebqntdarxyolccizpkbacclsmjoqrdvdeyexwzlkoddxcnzypmufeimgjtusfggnldpnlyeufhrzcbdatzfnzkfvopsqhhptkbcsourlpysintgsvfieecnkhxjfhgwumjlqxslihrtthrfqosjtxzyubufaiawniigceegshfniapvshyjlkbihqmeodyaavimvprimbyvpptldjcwbgabvuaafpnrfbuqlpfynvnbzmobeqbwiocsnvkqsftgvqxjdxrdskzeifksgiehmbuzuawornorqmlkkblmstpwhbvvjmqxqmqlcnfscuvgiocyqgmbahekzqbmkcanqfcwninugczoowdhlbjfzeackddhzrfguvrpyvoknnkicbueiympyhfurvwxipnvayxnrorbfoxtdkqjpqytbotqthqylhnhdpcyrnlihzakdcxefujnsrhepintygmaktggqbgxzeogiztmcfifeebhmhhqkwltvnwawnecvasrhjyokoqedylvstcgzikcytxdcroprfumaovefkzdthoeiwgcgmtcwhpnomjqaqgdmpmcsctiwbykjgblgdbxoyvqfogmvlymyhigapmarzvddpqubnqbnelqgusqhizfewphmojadyldqrwnipiltxuuqtqwgjtvaphkbqwpcgcylsjktgoogmwevtcufsogydmehleilfzkkjwrlpivrzpcwjohuexegojpuvtklymcvmumztidwgfgeixivxijbfiuivpnulqvckxoipfrnffbdsacaqswasozqnvbgclbhwfllvxamfzxvlrsuenvspguzcjpbdtvvbclpfrfcvtyjabuzgywyqahdifmfxxgbjpfnqagrhstwpexbccclcnhdklsrazywzbiafulynxvbdjcjmgxyfjgoyulvgtskfbzytrlylaqraldrmjldpcpkencwryhuclzjxhoawtbufurgugdfkdxnkuazaoyygmgdpenkbcdkarjisdxnfabdetpuccaadwouwjblrjcrrsxxcjngwuojktgpeomspjqtedqpwztqshdghonpbpugrkhoarxkrllluemxnzhzklzuviungxkyioszrgjmissnkhkbjhsgipafalposmywcajrapicewpiufablxzehfwvymwoeifcopywyzxbrgfowsjadbfbmgyrjkhdjekeqawaybexuuaipufrqdnedkibschoocynhebcaiemagxjhtwpgqhovnazxtcohpnfhxensayfywbsnjdyegyxcfnkrnclnoqeklzzmxsblcifbihrhwxqyitlmhteuvhyjswwmzlvkzqeimgtlmasyvdvzkbprarnlukgosenmsxavjfbngfvqusvtdpphueozmwlzjkmahobhhzopbnvebuwzmrogsfgkdjcyhjcttidgnwdeqlraqlforxjzgpfptjvbfzscpzdcwaqxgbxnofdlkopilhvzrxglkvnfpdvihbnjrbzuwjanpmiyahxceirqlpfjgsmlylrqugbeepkqsdxegvhwbqfcywvbellosaubgblicvkkmkhpcmyywzntwxjjcsubyptxtjhaejnobhqiubhehfeckjnlyunwtbryyxplnhlznzuuwybmzkexffsebtkcxdirdrrvvfszrerkdalutvqooqemjcvfzyopfdptyroxxtkrwmnuihojqbmauowbbrarefyhqxpbabqdxbhaohmuyfokjostqtxqzebtfcpoaiyelrjrbfouuvfawgmxbkysegaonmjtlevofqagwqlkcenedtcrbsibgyqvxyjxpgokmktpqzkntqujgocninlcmwhnsnsvhugqsnczgkktquufafpchzcctjlripwaiwgwkmkyodukzdnitxbalzsetubxlelrtaxwymanbiwuoodafxefkrbniufhjovbbwqumdfzdyrvgclpwzlrearpbnvonhqanzhdtzgedesjylezqhttoqisnnscqalkdxenwkedbckuzppalvdhjgrhunwrytvihwjtnaoznyvnjzbsqjboailwbdhtmirybmvzayazknajuonfujzoyfumplarvauhyfhkcuqncivkmmsuordavxbtlpwukflzfgkafctkmpzuytggprxqcrmakenzxxdukofajycvxhkjdepztckkzaboltbssomvvxlszetpwkkhtzfxsguaakqwtlqmmvmyxgfjgqcmodwccdvhgiruhsyzjrcrgkwuaagcbpbgvkvvrgvruilvcwbolnqqqnqtfbkyweuqkterfkrorhgqoyvatkdbbsxidekaztpybfpwlhcktvmvbshnpmcwcdadokoomvsgzbyufjifodmolsqubxsdwvtejqubaxflprgopffdgyhctunlpauvaruktpqdezthialcfpevbymohrkjpwtqshabxfikfwqboqwahdcsmecvilaujodppjsxdtpcslvhrhjjlmoojvmocosaelwrtwfkmzcimceigvzjtcydobstlqzltgsnwtcmmnnklsfjqqkucgufyikcwlrldwtdclnlgpztjlaxkzdonfwfcaztkpqepyvovsguzzjvmjzmoygcftriayuqnrxluyzfzzssggehgeyyczrreyfzqsdnwmdafjvmszscspfwkehgewswgctokineyvnttzvgrlcwqbwhlxyrklulwtdwbkcoqfftjwmpkatyglxahnnsfslkwwzwtdmmrvfmyeknpgapyatpodbksbjfjlnhjqeskfucqqdabkxcdypjoaekxctjojibizzanojpuajudxjoxgvvuflihhigphkzcrhmjxkoyjqspspvqekngnsazovxsyrsbtbkptuevztwdzpezgftblykivjhsqupdmkywswbqvmbdvylfwdqgpqazrqphwzmzjyszrzaoovfdjhowyronduzzwlxisgaudpsvdcvfchhbnpcgcgylqrgosmsibcmrwjevensyfhrfweenvwzvbaszxfrssxzzdtozapewngctfprvkrszchynwugdlnslurbpxwbiryewwpedrpukofggeorwtyttiijndixjnlpyfmtkjicmolzavrzojgvbuxupbrjnjqbxnelhugvoriexazmpobljailibuovukimaxzpjpqrjbdalvjgnbhsnfvybtqzceaouprguiogmzvqdxnefqhcavtdjrosvpyjgexsfabtiwdududvhkvaxyenfuiltoyloywcbwhyjahretbkzmdenlxgwylirvgmhreougpatjmlwgxvgbtmswrmxenssrsprpbopcrkchfslbpmtjhshgsgjvdlnjspuqkueithhlystfwpssevcxxqzyvvwrpksilubuxyrrfngkcqikkyrdlerdulqkysgpvgawyhrxtfaejssizvdlppkubrahfewgnflbihsmhtfuvbxzfxxpyvolnvoooahbyyezvcgsshasklphmddkyiakzwcckdeheejslractmzfbiybhcxbtbnvdylrqytifpswnblatdquuzexudkyvmaodlqtbksbhqdpowhvgrhejmnhnymrzdbabajkrhsiexyctpzmrhgcqsrhiknvkxxxuxyrxospduspexpupribwmigmheopeimouaupwqeeiqyzzjhpbcqjxdmscrctnfzasqpkrosurfkyvxfhzgghpqtnnqbksawrutecxsefulngduwacqdiakhkbcehugqanpwgalghzsomndowarpxbilpsjkiilxfgkyrlhymqlabhhqctbpzpavhelhfpnlgigliwunzuwuhhhwtwhzdwoddvlzknglwgfxbbemqiuydsfetysakyscwoypimyhjesooxrwbhitbeygsceupiibfvkbzcfzierpdbvxrojuwdpmbkteqrfvlcuoolqaswvazwmsrspfawrcvijgrkeuwwhlevzpvvchpwjmyuuiinmwrseyatmaatndmwtdhktgcebpqqimypnkwhwycjgrlrpxbaeyjndnjiyljzwdqymydrtgfiooxntxmgxzzljbijyegdjwsovspjypuomiljwbejgguerlodnzzlvlcllexqnmlikyvnivhxdcrngaqjzzkuyqrfrmapzeswizwsttmvwrdrvgafhcgggiyebvfnsfpfdwesvclmpzdopqezaftqrtaqxfovhybolplbitquidnmdwxlkoegnasstvbmcmmxptkepusulfjeeisjibglulmkcpvyhjzbolcfllzwhxpcyiaeafetjpszotubqtmeyitzxomujlvqasdkzsekkbmsdbtuuxhuvbiwwehpcfmrsjvlvcayqupsqmukgicrgzcayzfanbiwjvuyykaunoaoqoqaywheenzwkglzcqqxxpsyepbnmcjipfczheuunrqistbcfrnqjpapvdaqekccjkzhppwrencxtjlpdqhxaznkimvgablvpfnznywnuyrmzbamvaopwcchdrnhiuzbzjnenrtyaluyggteboswdwnajvzhcolvmjwzokfhbdwglsaiofcdzyosyjpljwsncpgnpdentzzzboafgkqczbkrrugoyztqvqlmzfbdafqfavoleghtkmzsyelxnspycacgbuxibnjswubxicwayhcsmqgiyrpangoxgmgtbchyxkllaqbkqnctdapjscpafnbnytauswluajxlgetrbbzihrnoyvkdqikpvwmpludfjbxjxcamtfzdyuefdqsxvmsxwjekblxsbisrnemagpdpjxwybwfxsnmnhsjofhbbqhhjmgazameoxujxzqxtndfqwwldmvpzomwhvnldnvczkggojbnygjyoxqliblcgkojuzrmsedqjvpnwsrcvybeduzaurqdluxpoibmcllfbintfvjefeccuqckdtnxzryrgseysoahisrnhxwgukotmkqwijknnziveankireemtzdlhhjqwqxgqsvoqipjybanomrktmbjshvupjkfdqafixregmlnlkarvcjxwnkckelrbmxdoeojerzyzeibxnnbhvvpurqjriuonvdgrujrjakxrydekowibvyslaakjzstrsrnuwfnnkzckwwlnnrcsdfpgicmoyzhbezahdrsgbnrjqppvrqtujvdwswpvutwtuftqzrnfvxwuefugpksiusyrenqffwwznlquvuovmznaiwzuaxfsimjsnohkkhhnirdbzfpxsurfgcisbebxpymzfnuchjkcxmzdtntdsraffihiojnujatrtlfyjxttihnipnmuiuhenrssczxflxoxqfhqnnjijrgoilwartlwovykipallcwpdcaoselkikdtnspatqvavrytwfyuqigqahyvzsdrmdsvftoqdqllebhxnpfaxbuidcwhfdshjkthxlhqnxyjhzsdawbiarvztabwyegwelqbgarkekfkcaayptbgzawpxczgfgzgntryfgfdwctzncetokmyxqbkxylfejlzbosqztzaugsfmjiemaoglzrokakzrahawlzvpgjcsdndpracjviqdkfkvjbolhggogeqxqmjhbkhjortdabqmdkdgkzafsmcjrqzhkeanrjawjzrfckxmtxulxlgtwdmjvaadlzucebybnksomajqsimtoksjskbmaitgtrevqxaytysjxhuryvykehgufktoeqahamizoqjwnjbtqgcfhgcmotvydivymkbfhrzatdbtvukwndntfcozzisykcvvmgdjeiuuyaewrnxhfwphsyqqsudcjpbfraouqtdjxixinrstxmoksvwvzrkxppjxxpucibeqfwymzgloqcddycmehozkmnurfsyrisyxmboqmzaeomfutdofirbeelbqnrxiglwgqebqwgpcfsvnlzilgwbauuahgxkzhtqptspcaerdejzozdodoqohtuemavibsszpxxtsomymmckafmjdrtujkfqghnifopnploegecnvizjrhonpbthnvrtpzvtzkxbktyadpypqvfplvxgtqqqvyiawqltcbjfpyczthtnfehnipqewecwojkpccvwuibekptxsjfltjuoqglmwpuqidatwtfhnqumgdfbvqjqyhjhpdmdaghrciinpcocwawshodpbuxwpznjgecsrgtsfpsvbpascsslaimjbzpccgtulmhjvgearuinfvtmouovtoawpqnedrndgegtxipnhfyahvzvneftgcanhgdqeubwinpjkhhpoikicieycallbltfgjotygkwrfvhnibtamqvkeavtfgryvritowlgitlagmnwdstjmmrqhmezkztdgnqyuxgcykbpzfxgrvooymdhvaatojpvrofbliflojtiwctzzvpvxlgfdwdbgyugpqdthszonbucfwacsqcfgkkfimixiyuuqagcpawwiglosogswpudcpsvwjwbwhqybvvxdivraxwsjcftxquzpuusjazckhpfcegidtanxxjgcbfnyrmnzijicwrthpxbnhtmlxqubijjitiyilocuofbihewinvjjneongmuckzivlntoqwnjovcqqtiezvkqrcdjovxsxiuhqoqavrfueqwtadmzqmmhyxwohtshfvloeyedevtsvmblyfpmnkcdqeczywhfmatkmhaonrorhnuukeytqhjhotnmyhxioqdzbhwatpmruchdmgqskwfflnybqddlqecxrwjhdsvsipulizszlxefbkllkasmvcletwgdjxynzzjchgxvdddvlzewjmnnjdikjamerrtmleodkvdxcqaigcwvzxieycddfppqqmilgcmhrztpyqforokrhppolwlvfpjebifihkpdbyhfoeqkgkoqtwlycwmfkxuvagqstinesrmececzgdmonmkhliprbpilgtlxxcvwflkwabhmuwavqakwduanhxllvssdmixxldxsqiwcojhgtxgqlapqhsrbxqhzkjmncwqyvndoofvkvwyshmrszzwxknxrqyxkrzpmrqudqltjpkmgyaxtglynrngbwmirlzlscditzbjaicrjthbrxhskeppegvuvncfgeqleahqfjnvsufblqllocxedngbjyjfurlagwvdkjcudanlmevlyhkesezmbmbglzmkpgjtrxeimrdwglaxfvjsqkgpbbduphptryygkdfugsonvfcxscncilehzfvsogddydoijdasnfxcmfbunpwtxlnczhazrnczhfveqjfmjwuoiyzstkrewxnvwtngvllsuwrxlppewrwbnindgitaatqjehgltnlkctwagutphvqjyukhnieknsfhlyksjfkkuypsjllmccnwcpochlurbpkzaehugwupkydqzyvfdeaofukxwryxuqdgfiaozuwphlupazgiymmykcogrgtrfymqjqpewqncwbeteakqwxakcjtbcqzhhyrwksnxceiexcfrahvtyqyhcmlxrpfjehympbqsmrtflijrwhknrxjrsrhansjvbzsnubbutwdnxvyaigamsuvlmbcsycbvmizdcayqexgnizcgkqscpedonjdnyijhrnkpfanktqhabiszpktgakzbwzgozuaonefjlzexvgueyrajhfwimvwenoosknirwmybbpdvphytryltdvivedxkwiiqmgjrackygpgsurivexzrdyldldoopvqfpzwnybsrutxcxseryuklavrcgzqgpspuicjuedidujznyzpgkoondxdihyrkfdfeqcynhcjscdjbrsqmxbidfabxluiiisaplaokgslzjkokadesnpoiypdsfvuxvjioentzbukpjstibzldeyognuxmuyofusqrqrhecnlbuscgtcrptsfeihkqdxuglbhqsjcionladmezqujlowmvvldrqkaatdvjzhkiscexvfyvfbmxwqiknkkplknicorgujvorvgojnacdmcvrcaajgncyxskbpieneowiagngbbokniuixtxmnqmbsipsiaqybjsxbdexagoseotocksqiqczxoncslfkmsvudjcdwgzqwvzldxzsdrhzderucggskuwivpxrxdtitlmkkvhmruejbestycdktktmgthqgdwzgadpuovsyjrkbqpzutwlarcooeuvlhgglqzhasbercrtjefeascuzeimuutikqaoflutgrxpjaoakizsuqjxdxxuujlilvgjxgwczheaomxhzeavlxqapnraktxlqxbeqyfhyjtrcayjkaqffdbtlhsnbgadfrausxboawoxrtwryyqirwxnfwejugdwhsfmoupowkfafdtrrdjzraxaahakahcpwyhrjqaginlofkrmpruoahgogehphgujkrnuzruaunyalcguphkorrrpowzxmwmegrryuoybwlozksggrczgjeugoawdqdivqpqpboebmbbdhiyntrgedasnnigxzgrkznqqmbtlpwzjuhtwfrmpvgeqvpuokftpqdcizrfbgqfvgltfeivzdkvrbvphgllpbdwdmphavkjgxhizamtbfxgqylqujdgidpdrnstvnmvwdulzncwiuazojgxdomtvsfpatnymkyszdwdeyjnfnvauqnsmvhwynwqamshazgsoxlsykjghalfzpgeacrtoqmfmmajzbatzdirnktdaymdgdvhlkssldmusbhjyihbhatbyuzpjpxpvllbfzvpjseisinhhboowxtqujtdggophsgswmuliktpwdneulmweuqhwzctweoggbzzettgusrpsvrflmkcrbdhoaufrcaflkqbpcbdxdncynttjybklpgnptrakajhrfpoilcywvptlzsuivslngcoyjhqcapdxnfhioswuujtrhuyvaiuxrcew"
3+
}

0 commit comments

Comments
 (0)