-
Notifications
You must be signed in to change notification settings - Fork 440
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add kubectl-minio plugin #188
Conversation
This is ready for review now. |
kubectl-minio/pkged.go
Outdated
"github.com/markbates/pkger/pkging/mem" | ||
) | ||
|
||
var _ = pkger.Apply(mem.UnmarshalEmbed([]byte(`1f8b08000000000000ffecbd6993a2caf637fa554e54dc77b7f716b0ec5df6bbc62e51cbb25b2d999ef8c7091228a04c8623a0e213e7bbdfc881495140dd7b9fffb9f582ee1292213357ae5cc36fadf57f1f1cefdd0f1fbefddf07cb89ec18fcaefb6ec7753cc7efac6360ea11fc0dff422d7e389b876f0fffcfe8e7eb73c7f23be146ef9cdc84fffdcd0fcc8d16f99ba3677c7918bb81bf897e6991fdf0adee8d5f1e669a6b3e7c7b7035c77bf8f2f0c3d71fbe3d3c7c7978d3369619a14f117efefafe36ea00c73bb977e1fbd1ad5ffbaa45bafdf0edff3cfcfef03f5f1e969106cd876fd12636e98f85a985bef7f0edc1f3a37f385e1869109ac63f401cfd43db6a0ed40034ffe178ff00b1038d7fe89a6e9b0f5f1e047fe8403344cf453dfbdd42af0ad69669a03fff271d24dca0f8c5da660db4c80c3ba8ede6e1cb858be85fc7b33aaee91eb53b1de78eee1a0f5f1ed64fe1efe807747edbc45ee4b8267a48c7323d73e3e83a74fc20727c2fcc9baea16f3d7c79f043f4cd3fcc007f3088dff1d0812432515bdd77838d19869d77a84566f184757082e2ef037400feed459ae3999b8e6d6a41e90474c2889e30f7f8af4d12447ef6474723af243f7427b0f130d1df46f1a2116af90f532fff34b85e8fed9f9ce8385e646e3c0d764c63a76d8cf0b819844e10397a7ec676b5c2afecf68de61971e4c08a4b610c2268e6175ca397ff40f7157ee98f851fc50e84b6c6967e71bdafa5df3d962bfc3e7a65040be3b4ef31fdf2af4eb076f60f5f1e0c2dd280169a9df05fb0636c9c2d1e6bd3d37dc3f1acc29f1d2df4d8e26f74d7d7c7d219c7d33649f18c1e6e8b3f2d1f147fdae6bef8f3032dc2c2ef00537df673efa29136371b7f837af60e35f479ef6e545e1abf6273b376229f77fc4e106f4c08cf5f8f37d00cf5f2752dd4c2b5b97574bb63f95b0d3a06e229e53686b635750b35f82d0ccc5d07fd73d4c2da381f1adc6a9d8f5df41b660dc5ab7118391ebadd8e5dcd730e66f9bae93afa1a9a0e6ab131c3e83d86b50d3a6419171b6d352fb0f7785c7f0b300f2c5db76cdf08c34ea2b9474fb7fcdfa06f6dd013372757fcc0f4b4c0e96413517d19bd34f0f182b8d86663be9b1bd3d3cdb3adc2c0d4cf5f8c36271450bcbcd3ac938b61a4e9eb0efef7f81a88dfdf35e8776c7373f24196df09367e84da903f2e3508fd4db4369393f1811a22ec8b8f396a12258159f718dca6a37949a37646bcd1d01ed0a831da41c2487383e3d6be05cd0e8836e6c940e12b96ff1e1f0e5597b4c0093b96e78791a3777e06a6f7fdd778cbd5b6441b8c034fa9e9a4a1b98f4c2fa47b5cb1e9c6b43e7ccf0c3b761405e92e7eb941c770c2754553c735b40d123ccccdf1dafe300d07301122b460634651d28990fc50db886c85c53668d93a1195698e5f031dcb72a2083d7cb7714e5699ab397013774c2d4cd0733a88b0ebda7c40735fdba6fa652d449ad3a575dc22db455d2d081b368db4b5e97b9dcaa6b61968777a4ce7dd819179ccf6aaa5b646929de902d3b85206ac6e1746867ff27d5184779b4dec993bc788eca6d2647da38e6dc2e07444ce34de98a11f6ff463865694e22dbfb3fd03cbacfac6344c2f7234d8a879d845c258b3a666d4a899637927e49cb7c46db4b87a34f31620d6d766d4097ce8e8498ba61dddf70ce794511fdf8458d4e516a6b7bddcc0d1dc46dfe76a86ebd47c8e77616c718368a31deff6c74d760e34746d534981999687471f317e7cfe77d7f17e77fcf67774b66ced4d3a744c2fa2ff8566d4d99a1bb4c39c2cdd36b77642dd36ddca9168fa04b4451b4d7a439487df42e7745547ba6d42886559db774dc33921f8b40562c7d126d6a3f88483fb86b9f1d0cad17d4f8f371bd33b2682acc5c67c87a61e71c7d7bd48f3b47798781e12cda2a375ece9bb8ee16c4c3d3a9ee3c08ccc0df0e38de57b782d1cd13a5e0015b26a68eaf1c6fc0d0d0e5ef497afa2ffa8ae576c653b1b3fee587e10a28b1d3d882f37385dabc72d6c3f8c2eb7c8362bdd77dd63e670dcf864d7386e70b25c8f1b041b5f37c3e3c10bded96e47f7c146abba1050e5ccf27f777dcff20df0bbbfb13af8efdf8892d90144dbab6b82ffd17d83e8004d1ae7068e46cd37bba62dd16a6bd236d838ae1339dbbac67bdc7c4f7b48d694dfd1c8fcfb1dc3275dee04da2624db90df0975cdf3d21f91bf36c91822d11dbf60df496d28683d70672e02a8ad4d0e9cb9aadb9a6e6b1c537339f061c27699de9966a7b690aa56350f0943bb13991bd7f13478dcc433a30eb52175f4688f64f6aa26e83cfec78a0953a96a703250d9858e1d503df1f8b263785ad5f92006d0d1c3f8fd1d1b584ad77d242e9cbc8c9ccd46ecf87298842967393e9d0d72ec85dabb699b9a4189e3a861ec9d7e0c1eb982a5e7fcc5b39f56ddaae360b9eddd39fd96f20db1e7a0a55dd928ef5af4fe74f1fd48aa3d99597c8570f10e700c67139fd2206e136d342f7cf7376ee555fa85f811171b78e79e90c9dba52b8e6b7636c4924a54d8df0bd7331d3c3785a133a98ad8b4fdced9d43c3f1b63c30c756a4769d8da0fe86a6ad23ca226cf26adb33e18e6fb96ce788bbb5c330c35cba4127e9b3b23ba65b5b9a57646f27b3211a441e377c78446e86f9a3efcdd81a6412d990d9b679b5983e650b39a7eb9657a4ed39976dca0e9f422d1b3f970041bcd72b5868d9b534a18359e402aa25f6e9d59ffce37a1c23239417fb4bac372c2089be42fdd92fa89d009e79d6a674ddbd74e22b123ae3d7fe775342f0940f3e6a9a5b2cd3d99c192de14acaddf1dafe378efbf6f99f219e777a22da56712cd85bf6353a4ad8536fdafa319d0dc74d3b31d7da3e73fdeb1666d47d8829ecd3e4822538356f114d9bff325e546949eb353503b241bd332f741f1ac6746a9be9c9df343cc4c8aa7021f96bee0f8164a15d0894aa743c7b3a0f90e1dcb2e7d4b9884ba06612a35e4e631338c889b016b618edfc9b422ea4cd402a7a319ae1322f2a7e487a79028a60d5a0133d28e9b0641787a3f3979be39bac21d5d890d273a7a9f0603fbe40971642309463ff3e9c797ab3e228e6c7fe31cce3fa178b5fa013e9a05b4cf54dc9e5fe3ea6ee62a460268916e9f3c373d5bf1447a89ab1a2edddc20694fc7c6c8cabb75dfdf188e573d1847172b6fdf9827b7194ea8fb5b73939c99c4e2f58a679a5bd38bce7c6eee42a8befe0efd1d523d363e3cf372cf8c76fe665d3579a54b150ff7903879e6a9e452c54dd46458796d0334fde42be8c9aab7d04b154f0a75db34e24a922c5daa7a6aa941d5b3cd28723c2b3c777be46f34eb940af2f397ef3a7d633ec9bf6981139a9bad593011961a5c7bdff1d7b6bbb5c5279fd808b3bf6ebd3fb752def61862aabc6e745a3ff674e45c4db71d0f31033adc1df35fb1069d28a96b96caed971ab966a4d534493d1f35cd28e080c88e171a86f89dc72378be5927f632dbad71cd3da51f153471e1318dfaa4fb5e2e34d737eafc2b363749a06d34f7d2e41045ea4203a801135e6a4085ddfa1664a15c2283aca1b97134e81cb075a479e3141fd3e28e54406e77d7c6d47dcb6bff7d61b4313597d8925adc4667f4f27da109b1edffd200a4488973d789891efad89c77b151012171b15d2d73c0adde379a7b712c53b37e18d5b6aaa1016af3df58668af7b9d8d2ab9bae828be06293fa55829b8566543b5a5834372d476fd48346bce5a825e10a75ed779a53db6d0a9d3ad7a69ea1ed2ef431b29d8df1cf40db4449e7dddfac4d23c5e85c2082f337e5d683f610d1e3a6eb388c7c97c0d6ea9a74d64fa161064d9e9636457cfeddb15c2dd03c2334f58d79e1b34fef5ea75b55ab9bb66d5a6746e3e2ba6e755b879a18aebaf76869d4df5cc4319eb929d86035ffc23c9d8a30440efbcdf27365ebe2c50e865219a91bf4b4618238925e75691d0373e39991195ebe7a22af5636a26263ada1e28a9b8f64cf4b4f38366bd4b76dfdf023d5ffd20d0d6c23176f3f6b326973578b0e9e35b0b4b8a9d5eb2acd314d6f39b6d2b4baafd90c9eda741a346efe59e72c40176eb96c18ba74e3397b51f37bdabcecc8ba74a1ed25a353c3db9a7fd83913d5a55b2ea8c1176ebb6cd0ba70e3193b57d33b9a7fe119ab58fd1dcd5f71ce8676e19613d35a7ddb163da836c45db8e18c7daee91d2d3eed9235efd26de78d7c97eeaab0fd356a7ed53bcef626336c9053e5bdabf50d173fafeece8bdf78a276142ec3d872bca2510d3dba63eecd4aa16b6386d1b9f3c7ba4bf9aaab05c1916c4caf9ed75022d30d6874d9e95dbe0fc3146c7be62af97d1c0657dd048d6ec3661df44dd5e350d5ba9a48494bd78c368e5e29c19206c56898d32648030888dbf0e422316e98972efa9eb7f1a3b3d44a6c15f94670b64d0e13adbe8e437fb4ea99c20dd66652f61a1e5d47fbc3bf62332e8c020d522cfcea6c0b52115ace59d00fb114526ce4b90629b6117be069238c1fc74e7cab48bbe4741ecc443ec5253d44ff758063e57f621307fe9ba25e5c621941ff75dc18460e22fef4c4bf623f320dac7cd13011626e490168853f9184b376cc0f6d533c89fe495dc4a5937488b373050c153ae76ad9e5c8dc47e950a0dff106928050f44fca1cfcb0131318229d5bf41f8692d0dfb981217363933f3a61e245da1efdcecc44a95ea963e06dfacb30416c157e678e670de9b37ad5153a0d27e7431c7b153a56f87b4602a9569c1288e619610707f5d634f5c248f3a2cb0f34f781e651be7bbed5bba6473ed6922fb4b9fc220bdba52e5cdfae2f5e77def5baeb47f68d0b6d5dcd322fb72801a02e36853e452f9e6f921a3e6a5a34fefe8d193a97277f63862e8e5fbed824b58b9c6f149160f78b4df28fbe4c01c586d456d6b67dc730dfb518464deea666f5628bdc15f41bb636ff6638efef9d6db7b3d5607c3c10d44a4a012f61b4d17d0c9b09a30d9205d15f89a7d3fff2a54e41280f5f1e084e33970e4abf093c1a9d259c25c794a6d0cc387a67bf967f3fe19fa1f68eda6d4dcfc0117617a1d00d5a15c0cc975ae3ff4012d5bd3b6b97865e5f6a1c6fb6661ac87ea19dbd36de2fb738c56d5f685cd363b499185e880e8acbbcd0f018a85ddb2ed8f8fba4a6618edf3ed78ac2b8ab2ee7c0ebaaab6710c6679b1681c6671b1de18d6bdb61d8f1ff7c797833c3284b48e1c5109253590a0a72ead537d0477efbbf0f4d5377bc6a8e97e6cab843de10c17ff58d9b1ed2c11115067e9648159d6f0fecef6cf7e1dffffef79787773204757950bee1202347efe8300e2373f3dbc687e6ef98537d23c954d0ff8619690ec48ff3480e93d3e688d71dcc876f2cd77bfcf2e022d6f3edb1fb15fff94fcc93be3d700cc7fcc63cfdc6b06f2cf7adc77eeb757f7ffa83619fbeb2fddeffcbf4be75118771c27f22b1fadbbb064313f33f9cadc5dc3e7cfbfab5cb7cfdf230f6fc876f4fdc1f8ffd3ffef8f230838eb77ef8c6e279351fbe75bb1cf3f8e561e5180fdf588661be3c08f99ff23fff196806f3f08df9f2b030d033992f0fcbc297f3704d3af2c8f4bfa29fbebe0e1fbe3d7d79f81e392efa92a5a93f7c637bfdafdcd7af3db6fbe56116a2334f5fbfb24fbd478ef9f79787d79aa6699ffffde561d0bca9fccf7fc65e1c9ac6c3b7ffc37c61be30ff83a7da3637f748674329e138ab4d9eb726bb7e9ab9264f5093a799214b8d6699a173594e33534c1e435a1fad539285255fc69f2b9b6a1da87f6bab45cea1f3cbfcdf24f7c9c3b70745e603d115139d835bf0e15bba3bb195a4671bf2c207dd4960ba434693faf1d40d1ff5a41780a4cfbdce838d26f5d63f1dfe0718890743109395db0fd57910a9f2c2568521a3bcf92fe3011f2b120b7f3a7ca449e85e76ab0b62a2c88badeeb009e0f670e04d582088879f966f8d078c85be67d19d6c0d99a7e7bea3231a0fc6cec0417ff3892acfb6863cf950e5d7afe4dc777c2f7087912acf768a3483faae70ef680695ee041aa3d7177ace9a2ef91de01687e2fd3a2726860bd1738beda0e18a7176ef4885ba3b297f9b6040e37bf17d866d0833bff86cf47e455ec0d2f70af050ba4f584020888c3aaf190b61b8d3b3ef99409debb3ba3b83fac12f7ef7c110868c2aa92c18cd8efbbe56653e045d18a9528f49c7ca70c544f1ca63aa7222d3ba1f23fea4ff06376414ce2a7e03ab0b0bdb1056e5ef92f6909ec3fdd4564602bae2eea86f8e222f3e34fa4edd150fa02b260a271e8d53b055bc16f326cc12551ad2f14fcfed03bd3b2fd14df1dde7e6db90f9f5f138a98218aaf4dc74c9dbba0047badb67f55179ccc7682ebd45a0baf0033d434f7a9b9fa3d758939e6ad7c0c9bd1cf4800b63b53b81ba2c42bdbb388c4beb0a3d63c268921a28dc9051e559a072bd00b846a2ca435695678c9ef46d7dc427a0abda60302e8cc57747416b4680ae26cd6c43100f9a64c49ad4f37457dc1b92783046af5bbdbbb08d9198bdb78aceaac6ab8ad68ee9b1e9981e7f67c6cf762734f413f1ac237adb18d204ea6e0f927be176caeda1ca0d3fcc25cb02378a41d788ebe686cc85985c5a6f8accef74b7cf95687084e6e4b16e4d501edb8b34e911d14a0d7ff8eebc38e3f36b6330fed7b88e270b6c009cca313cf3acea3e8f1ddfc136351c3a9f6d73f94686f7c0a632edc66822caa6ad5209b6ffd8edb38d455896fbbdcf3cf6388e65be5e27c2f6ef27c2d24f3f23c3b27dae5a8a7dfc834be5cd3ec3f438eea9df3d23c5969ad26e9f9162cf34fd94623fa5d85ba5d874c9e6c2ebc061a229629488298a2ad4bd5900b8c7aff8b7243e1a821863c1d67b8db5834d187757d92baec8286fcf4840cd0459439e3180639719f35e2da0eac2589317e899a8ed9170fb1dbd37066e9f51709b5e81e9f11f80eb31badb0f81202653c980c0e9e14d44f1c400080ba83b449856e5c90109d83f9defbe2a889c2aed02ba917ce8ae681b02dc02b80800da4c8561a4fff02de08921a00208167adf7c0bf55541c21cde008e3702fea00be247fa7d2a66e6dfbf62068ec6c42d337222481798b41005c09d7f1d0f1710b8c338179af8509367cc9283b1fac3b744fa0d6f258190df81919828d2eeeb7844ef2f08a33a676f756f51b5e932aad4b381372fb445828c182af2387f562a0472b3ad2eacbe8e9f7b361a2b5d187ea812bd77346315af7a234c85939f0effc7fb3cdda486a1262dc8d87fe46d419787603d9c2f45e5b0e266be2ab17661a3b39000af73b344937986cc29bfa27db034f9d55296641e52610bb5190bea5677787bfccc06600d7f1537ec7c93fc6ee9a309569e0c0196be9fd26189fe8bf7557fd7776f2ef2934cf17390e0ad06c0150fe3d1c257977c4697aa3447638bfb3a16fa2eba8efaa2bbe20e6df8488150b23572f4de01bf551dde060ebf55dc002add793c1e2201157deb2b9e7b43daafc7c26c0bf0b9397aee07e08c589303a80ef883c2d9104843f45d5bfa6d21166c0b4279e17d01f0164850b3c180e71469cfaacb9da548bdf558606d73c927aa84bfc332a45ea24ab32d12764d575c8f47aa0d4622d49347eb4dea27ea920f80ab6e7f3abc6f8c1648d8da4e392330069930be55b87e046411f188de94437d58249a34610da19fe8497fadca2a0483fe4193f44891271f9a0019559a31863c81536eb8d3962ce2131c1a4334d668edaa83595180f44ee672b4e8613a1fcd181d09f63bbf745d236bf1646c54413c28dd49a08f1684470e8ca986c7051ec6c2335a070912dcd371c0748869518c0d01c66ac2339ab0b2566bf14d2c0ab94b741e1e4ebe13ad176ef22fd4dfd2b346af251a00d2b03746cf77c524a52dd59b6cc192bc4f957a6b5de807680d19820dc7c22cd424b1c0838a63336315970d8c11a6cf5401b10ce1291e3fcf6ce0f6b6c68077d44cf914d753879f0087ff81f80f789ed93ab78ac7cfec5677579626f55c70f02d6db4609042314dfa9e26cff3bd04cdb9841400c898cb3ee5f9d031e4c556f75eb7949f6f91e03f958689c2d98121881fc6484cd465dfd68575a470fd181b1804b24f0169fe618ce04e955f233c97a3f6340024915130ff7a3ee505e9bd42dfd15cf1e3781cc95a5fb068df2af136b2bed6aa3cfbd05db8a3bc31e3f9abc27d98a6c85ac5fc2ee371e9fe41d7b53a42cadbf884562ff23af21dc4b074f27d67687d38fbd004716d487ba8afd1feb0426d5c4dea419dd235def396985f15bf0dd18ea5b82bcb906750ada239f23d0c480af72d73beaf0bfdb5beabbe0fcff39b9fadbdd3b9c24a7ba0bbe2baa2afd158c07d39199ff4b9e9fa2b3fb72c0b349adb2e0f95840fd2b1d2c96f1774c7684fcbfb9a2980a7dfd4604eb12162cef563d5855ee3b97dc6068f1f80ebb99aa45b8ab40f41d7388c47e201ed6164df984163c043c29fc5c358d8071ab7b2e6887f4bfdf80dcffdaee29bc8f1d69d788ad4cb8da1031e1ac2aba5bafd84d279d98832affef6fa31208752fcaeb7f3ed10dd99320f7f3afcc1184d02e0ea67dbaa42eff0762cd7551c9abc80a0a64d9bf716dadaba37b1cd3363836405dd356ce0c2af549efe79698de303efa7ece1629b26ebaca2ad224f12455e57f7ab8687926f43f2c06c0b84d599b13c5d6f88f675ae1faaabd916b86aa076b1b11cd139961f09bdcda08168dfd52d4346bc1ea6b208b97789d7e5793ae84e6c5db0119d86648d8cd13ec7a8f2c455a4b2cc59f8d69deef67784c6c50be38df59e03e0f670c589487f612ecfdfa9bcace1bd831aecc97b394d5a203e6d036187e4014e93275be0b210cb04ee30d1a4a10304b4aed5ad5e430b4b467c1b0f899c4165f208c987d829e1ad2dd585100855b265dbb12007a85dc367f8dac0c0f49fcadc2a965d55a82359617049468d58c51513e08a8c2a13395515fa1f7a82e5930f55e6193de96f0d173b3ba091f4bba03b417ab037958dc010ac28dd37f4a48ff7593d79faa03a616d3fc6037ef5c62c7efd74785e15e616e82e7cbc8fa2fdd313c3b1a006aab45f2339bbe47c727644761dec2c4382eb5fc9259e72fdbaaede138b3429c6c6c7459e7bb26e97928279bbe1c2b52acdc9bac2f22bfe1f024f0d74b71f0324b722bd449e048a3409d5744d3f67bce2729fcfe886c747431e7ed28f85d4e34477981cc9eb96223d5e58772b2b6b7b563ecade1900aceb625dc9c6f29753a53716fbcc2748efc64e8dda3ea1f9c332517dbb4a5982c8868053a8ae21c6860b13c0f5b0a30ce946ba0b6dc5ddc3a9c3cf0c79c68c850944fad39ced4f16cfe24ff1190acb95b89cd6f005d2b7cb727cc5f8119db6013fa99adf099b7f3f9a63a473a912e209afd664604b7371f2feb61ece16cb35daff50ff1f756118ab82b86e329ee301cf621b4d2a278e26d070e1d640744ee56d7570793d68d2231efb86efc33a9722c118f118a2e70f6373c923d98fd3a4d9c539443c08ad5d6559f886b3f249f9503862fbc3f34fd66568b8e27a3aa07d774557952710b8e81b604c7978003c9e45fa0f959b2c8383992daff69d480f917a1f1a9a130eebae2bf4aee3b9d3bb303684e1e35898d9c0c1fa2eda676d5d10d7e311e6f10de807ada5674b15fa2ca697c11cf52d403c743298fbe27ab894991effb65a0553871fe6cf2fd315eedf808f555985757b73b19faa6cefd07c127e3a812a374c54610ff5ee2b599f9c0d119de80e19ef223f52653bc08e4ea19f34a4a31874e7f1f879015577c882d182e80d83b13375eaf7a176f230390c77181a9228e86e3faa9321c85c9cc84a6f54d72aea21e7d7d612e944c4b6d388370dbe5bf3128d8b07559a5b9aa4d06f5f61f9895c17237db4e835e3792df979bece5d4d32668acc4f55192e554969786ff5d8a9d21e2a98469e2d8d137b58ce427c9cea9f6fd270d7749cdaca84e56f8ba0d9889f5fec0fe603b81f54df0582f8610c6af6d693b969bb1f15bfa9f9be5b18b7d33d8a39da83737ec2a03d17742790d80b9fbe8e059b3146fce1a7f3b4d5baa2a3ca93582580890024fd35e066076ca37367501f2d0e530efb5b384d12bbd3aeb1d5dd08add5c8e020a30d586aa346ed880f619acc88fcdb661c48bf6e9581dbcd1be2270d65e6fbcd779fcc993b0c5bd17bb57d6ea74ab340f5d6277cbdb81e113f473aff15f3b151e5b50564f140edbfa9bfa3a15c933d27e5f30e40bab6348c1bdf7fd99677ee88307f68289314be2ff5b734dce7093dae5cd16dfe6d55f225e53b23ac57bb9a24862af101119948e8aff11e29f33bd09d307a52f0a92e7b78ad4d1bca42e4bb59680843a4bbdb53b7e0f75bee8a36f01808434795f687e9a0f43ee20f1086d4f7d266cd111bead4ed6d55810086a6e9390ffb3602851379859b6d0da9c750fb62e66b9cbaf656ef2e26ab56eb9c00fa0cf93546e3b814bf8768dd2af282d593de0e708bc96af41a4f1aaf8d5bf6ac1a7f634bba29f821735a497d8e44ae11302d0d79db102c2477b4e78fdd49608c161038580765547912e9097adf0eeb268a2c86d457648d3d653faed34b4fd6f72dbc94ae3f448b15bebbcbf79ec80273455ef805bb51ba0eb18f82c83df34ccf1a8f28ef75e105ffc6d9b9e457cf6b0cea22f3f7578d198fc1899a3c8155bece73c7341d0b42478def6b6c3b3af9c6144bf2a7f0d7a20f365b37d89f280cd1de96a07d00b8fb5e9bf55904f18d857d0024c860dbab3b2ff9545fb26bbd0f7db40af3b648cf66b7bab70edbbc170830d2e4c561ea8a3b4d1023559ed860c01e0ca19f289281f86b01904adf39ca41ad53978540ea27cdf74a82df51cbcf85ba60432061bc4aa477175bdd1d7a6a660f99b1ba3781c05b84e632dfc75469fe17f1dd82dd6c7d2f79bb688bcb00fbf9fa1a103f9fe1f64303db82dbcba6a04b789322ed88ae2a88b1e160ddf4d07cdcca6bb189cdf7f85005c869f26cab5fb4ef56d389b9eab758bbe4982e33790ce352544e6c688fc88ee8a67de592acedc2dcf7dd15197d2432d87fe2b2b65190d954d9de81ee25dff7595a2be25842b44f1dd956f6e396e3a923f947101344b7b263eb2fdd5df4f2f6e4bf0cc3ddf40d1a2f89ad4f21fddb59775ee49d2f0f7ae075c0f4e46518bc2c2d5f62a2d9825dcc17221bbcc87b003c31d21876240ef9a12cef7c891387f2f29a67af835f4943793b3d465654d65bd90078f30874c7514adf3f1d9ed13db1a13d948e53ee87bf9d3fb005bdc529e37e0af244ab75788dbdacd0b7bd21c14495e62dfac65cc4269c3baedcf70faa344b5479f1a7daa974ea5f2dd89677809b7b7a4278b8dee5ed367d6d8a4da8e82fd2ad6fd701b0bf2582e6b2a803d03e966c5abcabbbfd68ea7cb7de903edf9e2f21fddfc6b65001ae0bbe66d48fe6fafc8d745c87613a77fcf7f889cb87f8dc7f7e3bf8d65c5aacc7429fd104312136679505032ab78f5ee323dd33a4d8e456b2263e4662a0fe78facbf816c6b7e039ebd9e0761def8de2887be391e1ab32b52fa23534cce879ab3b3cc64222bed17a7c0496d5bb73e28b497d772dd75a86a571fb5b20883668aefb5cabdfa135fca7f2f776f7b4e9070d60add15fdabcbf119669f0ddd224d6566b6485535f398c905e46e43a18635f1fa6bf0ce3f923c5028d9f175b858b907e110009e95397ec04cdd7d8459ceb356386f449611f28dcf0b25e76ba1e97aacc879a34b3f5a480a5177a2c9026a8df684fc301c7140b3b5d88afd6aa8b31c8ae21eddf54797e71ef417a1390860cd125e687d74bdf97e1d3606c08a25785b14d8f33417b4dfa3c417d4af15918b723cf20de83f0ff858053a267879ac40606d527952ecf4eb9663a7b417623f84e6e4662332e8e411b3f23fdb651137cc970ad0a90eab3fb796b5dbe952ec964b48b317a92d1d087ce5ca527ff77e857fce3542ac936111abba9d44fa632d5a10fbe658c266c3dd6a3ca5e92d9c4d26b4ec6fb04d636051819126329128b6dff445e9f6d81ccb3461dbe8bbcb3a837a77866a8de2ecba53e74564f71cc1c6b036cdf623f00c7ee0c7901a772214e2a618bf89a6dbdada6a5ffa9c023ead7036fabc222487d8eabd6fa0a6f030ffe529bd97ea2363cb4f2be36f69a116f1ba305d4ddc7afe3e1a32f0fa2a7e972dd7919d829fd17d6821ffc4ae0d3cb70174b87efd14f91d9bc2cd7fecb309abead8cd5ea5934b4257c9238b4f7646bf1e96518c185c85cf3ece0e5eda9919fd41cb0e5407909c6c680ddea0e9beee55fc7a3456254c42c1c1f157ace32b7d356aebd00b8f75d7b055b433c7e86ee7858dcd3e0612cf4234d5e30aa34a776cde792fdbd912f5380cc896dec39e33101d185870c799ff848e413c880d19ac4617010e946ebe980df62bfb967047a23bd1fdb6f6cec0f93f9509558083c1af3e8b0997f3cc30cdd8cbd38c1b46f81348cb16d5fcae6282aca23f87c669b6ea0ab35c1e5b76cdbc0de14e5587ff18dd87ecef0bd667103892a2d0e75f8f90a79dc25328f1aa802a60756e756686d047a92daa4e69692ad17fc1e34e78122ed53b974751c735b311e992cf686712d93ae86e4bd2c7e95c6f63969fc329283173da4db68d22b4eeaa10a38decd06a3574b477cc15b5c8aadda02879f69526ff296105c27d275f5eec2d6bd05ab0f7847917af159fedc540e6c805ffaafb0bd0c17bf16cf4f5fc7cfc3b59af20c07d10ad2437634fe6171983a38998a94c6014f69ac3ca22b4d9a772eca020df7c0267a992af5b83bac0188feaf8d1d6947ffd56d6a6392fe04dcfd800f2eea4214d798ed4be7bfadb96fb211deefb4af6f799c651adf7bae7ff1f839b741294bfe87ccc0e7c5aab75aaed4c9421cd7d86a5bc5a835c3d557c4d18bc5f92860bef5e4fbfa65a8f22bd8ff395fb1c397256feb655c33d2979b6185314e03c9266a00ba989f129b0b923b2ed274e61b28caf1b5efbb0b8e7ec97f20be0c1a60d0d0fce275c5ed3982f72ef352b4d764781501c6d85799f29684ef6ad23ea418e558e16c1bb8585faa7d2ff6391c61d9c7a3590fc91ce6007dff23c5a2cf3e149987ea80ef6a185b53898baf7ddfd5b8798ae13747bc0d5c626bd15dd153e4c91acd733d1e12afb7ae2688d4ae4e723c14e60a9a02c4b80ed01d634cf7d4e19f5549b50d698fe4500624df9db1f35823835db1e6566a0238a6351f59511d95f2ed3a5ee2e9499a0fe231c3b5d7db7aee837b6feb5b530a98d72527f61ae386fe4c9cfb75b8fd76bec13f01d77e1d5ea4ad6feebf10c7fe57c88957f38e22cd5c8343afe02754973697277cf2471e7bf21df3474d46eba90d2efb567fda75b8f3b65889e6feb3f638734a2f8df11015ba568997d138edc2fae2b7ea0fb4cec59d2ef413bc971531e035391e8ee6eaafc795631cee2bda97d6ea0af38e303d9725a65d0d3f14aecf029a2f6b5ac0846b42ff603cc3f9b40227de14b752be8f3f348c7dbb0acf789478b8313f3fc5b3655880022de07c2f914273082d08ed515c343c8c474642ec766df0caf7c78d5fb9371531ccb7ecad7f0d4efc79385f16f289b588a9bb623f688d1b884ad8fb26fd6a6363ccbee94a1c7885beb9e2c490d87d78bb980fa0308f455d0f7d678c6dc505bb6a433a4b7da2441f2cfa7307767a2dc67edcbc6d0c243102dd49af784e95795f45f2873b0ca7f28c01dd89ad72aba67ca919ee7b7982513ff7dea0e17bb1beae74c504dbf3847d6f3c9ab1fa88dfea1ed2c1ea7421725c85abbb05e75d95ebaf60fb49ed36c57834aa437180dbb3585e2c62955ac563e1e740e0615d29d15bc4235ec90bd79aac063ad7afc855767e5e5bf801f1711b8efb3a5f7cf55c66b8af20f77bf5596384730ab8a03b8914795ecc5ff1a80bfd439607b3d9f8dc11b78d93a5a33d137dbbf932dc6dde074cf02bb1fcccbf98fb1afff5f2f614bc0f0a3880641dbc0c6cb04cf103d23a781f46b121b19bd4d7f93eb081ba128dab9ebd5c7726cd65f03be20a286fb806a75db52714e4fcd29e50d299ffdcb57885ae91d35993f16abfef5e85c3ae889728c65c9138620edb3a339f5a2e23f15b75601c088fa53a43a3befdcdb6955c76c8fa84e4599dca1a6301dbe8e2f180e4bc698325a5b67b4e91f6813a288c192736cb1741fa7aa56de0f6bdf3d85f91d9f8bdf9a53ca1150503165ba5fb8af3b4299cb83346af5bd05571acb02aeb5b83eb2738f63f61b18d792a513a47ed885f6f3ba6f69c36e37f2baeba354efaca78a5428cd84df1126d71d1d42ed3667fbc2e7f40c6bf265bc0eda1d248f7bc469f6968976ac94f5b6168ebf31c9ccd5ddaee7d0d724b0a380f7c02dc6138e7c4c448e9e0dc789ed2d4d01cd19cd224d7e85b86a548738d0acf18fbaa3b4477ce685098b17a77b1054bfec7fc3847e8055b14d1b7f8449355dba03c7a9ae646c4f60be293486329156912e2dccdc3c5eb2ac9e35291ee97e13286fc16adf31bf33bd6dbc51baf7f3a77777856338cce057a6b84cb29d2d13e50a51e73077a22b9acafa5abf3b95431bd0101623f58b9f8cd2aa478ec9dee424e911734eeead1120956081dacce657a21c65d0257b714daeff3189ae3c24525ecce1ce3df074cf4cb293d1f63e11519dbdc6343c0f7a23de89356afa655129bd102375317cbf10cb8d986e48ac5b122e7e6a6819c466340449e05c23ea5f9c6397297f8fde2dc90f6e12a8b813cfaee3ca60fad1b92ef3da7b71dbaf73c0da76381655e24bbe6eba4691ccb27e6ac7cfc2fc39c691762614ed74e345c119e89e35a744e6468bd04561fa445b9fa1b8ce5975fad3709c6cbd593b564d8b71bf91b3c2397b48ce33a231f0d781b08fbadd1c57a2f9aab84da13b25c5d4a573c18423faac16e54c93e95320e5d9f1e2ee086655f12534530c9fcdb8ad95df47bb6b2b536d50d5bea3394beee9abbb8a96d65ba247bde7df2205fde43489bd39830c2174feac964350270feed3f291e10addb9bf28e0b11d4d98cfe29d6f8b588993ec9cb4ef23747c3550d5d14642b7b2cb0367017b62160bf05d1c12f62d55bc5b235c4aefc176156fe32acca55750f6a31129f71ace7fad13006ab81cd81605b667788cfd807862bc6aa3c6b2123e4f78c877c02b8498a5b2ce5af0602e454a907f5ee6b5cce919e635c2fce39898980ea208d1bc218f12dc61cb9c300dcaeff07c0858c260dc38520868a0cd1786e815b13bf97e615fa41e2585f0f9730c82d7c6d231eea2edcaa4866e1fab15a13bffb67c5501b028c54a9cf1a7fe777345b0367e7efac2e7a3ac667c681a91a871bd6598ec16abecef27b4e74c2f45d25ac16bf53e419b6a519c293a54ac30f6d80f3e85c986bdb3606741f1ff1b6ee65fe5674ee72fc48b37ee3d8c58bb9204ff9f60c74711cc88e607a306f49ed2ed4afbfb25e86bcf4b27cb41647b8a52987fdc4c9391b7013595517faeb371acf87738f0ff92d10e0c7d9dcd6157824c0cdadd23306e8dc3e50ba6b9ae39cdfaa595d4ca4cf4f7ae321ce818af32aaf4ac5a12b79ca25bb44863399cb220318a45335b74bd03c598807f386bcd8625daaa04315ec7810b8245e6459929b7847b95c636cf5367c25b6bc01efe17dc24d6b48627b5e567c7b2c0cd358519bd65cf05579021bda0318459e6dd0ff60f49ac66812594dd8e398dea9f41c29dc9ed5bb8b0b7199cd30ab3a277e18f2243046f007da0b55d96e1ef388755531d1e4458fee97d01ccd8f6a808d535f2683635846138c9d0002dca84b3e31a41eafb3b8dd799b10d1530380f82fada5008474ec4546496eb503a98705adc9dace1634e1537d5c917614fbba276b4718866381140a473a9882633ff91d1048de3f40eb2915e395eb646d4d7ac4f630c0e13a9e5bc453d2bc9084b72159711802a1dfa57adfd49026100834879730f315a9e7a9cb34efa01163595c80bb1a9d669bc5418fd42d188911cd3fe7a84b7e6b7098c61d7359ca33ad03e7fb3ead9181de85d7c6b331590c883c55f34e27fdce059c91a2f283ef49fa3c444f2a07110f0ae87e7050e5b9f522f4a091209d6e8fc6b9c0ab606dbc1aa963918ea711e0f971e93849734bf1d6856f595bafc9238961c27b341be85d8283555c92b355776be2c09ffbcb0937b7880ec62746c22646c244d32563c90289e932a41eea57783a9fe4fb481c0cbb55058c9d477da8b1bbf4bb98d6383bd00714b327880990e081d66a26f80aa9d7cbe7fad169214f71b34671dff5729dead1b17ea6742bd6ec69e7f6062e5ddffc0f5abb25dfd7f23a948e2ad9b6e1c22dd5b3689d176c4bc434ae7b335f93bfd78c2ff1eda8f224d2e4d981f0a8cc569cc9028a2bba449f9f40b26764583124a31f346901b1cfb02ed686d6524bf1f8346e0de71d1e0b43c48f68ec4ebe6ed1bea0277c57132092b70afeca8c0fd6f47162137b7e9196ec2a5a0aa60e3f3106a9fe84c677650117c97aaa4bb02d9887e73987ebfce0c7fc6e346315ceb214f9f56bee77d865315c401aeed2fcc9aac4ee8c115c6bf2381e0fd3fc83b4ee700defc5f98707935f004eb6a0bb9869f22c52e4c58736a0758f06131e8c0cdb945f9d29c9cd1483eebc9423e218cb5763fb74e6d2beabc8f05017f7d7d896399ab0603dbc6eaf1b62fa1d2d57149be489715ef366919832bfd5d29c1fa73868a20773e2413fb75767f48c648157fc7caccf105b268e831c0bd01d8fc418f1fea9c3cf14798d648d03dd870e29166c5521d34c9def889fd6e4c3c1754a038064a6eec22fca3704c32b3e1a9467ae84febaf23dd93e826315ebde9763fac97b913ec8ea2e64cc552e4f19c210fb2ff4d1042a9cb8c631aa4b9a179ae843c5b16e63ffb91baf46f33597673f01d75b02aedfd6fe3b01ee82f82688be88fa74924f3d8de1c2b48765ec67b4ffc55319adc9ba5c4758c6247964480e9cb37b6a5e7f7e95c63c539f24927f262cf016c125ec0c1dbb2d9277f5ae98103906e79061c6c262aba6f1abe8590e6feb092fa275f53af8eeeb6e7f6b0cd634065cb5356947d61bb62dd5f5f174dd69926269f2dc52857e16274e650a1c4ba7bac350e756e158e86d535e5aaabf5f57db95ec3768fda13d0f63a049be1e5cefdd06a3d996c4f1666bab8ac6e3f100f3ccc359db60463b301e0b93ad215895eb9ceebf73c02daade1366b1d7381639c37404b5186df4de6a7ec0285284f6d39dee8a1f38a78b3bbb5ce3ab05168dae2b51e7aaea815f5c53584e1657f099ecff98d6d2386d46f7e00e70302ee61a2fad35a43b71336c0bad919b8fe2d4535fe5096fa3bea692fd27501d9e055eb1eda3f5260d6bf2a55e4557447f72fb48d6ae6adb44aebb86aeceee4975fa48155de5f1f6889f34ade399c526105efe436994b7b43ee7217f5057fb0078e2e31bc58f5ef6fb9ec93b3d9c0ddfd077c916a541b2aee8be6eeb233ec4f213e6a943c46f0a3c6e72a8c331a73caf302761a58c92cb1c545ec5baf407c1683d5bba3b8c55a11f15beb78666f23d9c62056d2cab1673c138df31bda377e91ca9754f6c25e7f8cda385f6b01ada6942ef648f413a46e57b76d40749e4e3baf735a1f7f168616b1c92d9f9449566380f55b17e22b69134ca93d33ebfa82aabb049dee70adf11345c31c4b8cf029d0241e45469679118e45d2ab3a4b44aebde2ffc46f1078dd771797d368b0f417c7c7f953f7ae5e27ae6c4d65ee8bb4ece870a929b06292fc2ba268d8b7a6a5c43b6f17c539ed82a0e81eeb3f579464ef74ef41e92f3efd95a31e2ab26f55893be7f2cec6d05d144b55dafde0643fad258662ff6a5310e469ec12675564ef53c5a939ed4667f5b50fe9eda72ffd3e9bdb98f1ec792667917c133b1d5b6ddbfe64b3ed4701deabe9bda7bb1edafb867a5f1ddf2e4406bea7f605f3491c92ee70ec339d8b05fac482f219183f35cc885f714db79447e8091224f7ac4f6da68ff3892c976c466436c6887a26d549116ebd47f876d86cd6592c010c4a81e2756f65dcf3e6a75a01679631bc42f907607539e7d18c2be2d9ee32dbd6f2cd85b20ccd19a2ad04b214e4d9a5b7a171e94ee222ce1bfebf4af2ceeed11db24b05d4f5ef8d84e92e6e2c0f9ad663d9d9b3100d70e9bf42ecb3f35394804365039a46be5fa2910862c7067fe451e5e9b9bef1c4fa2df3e286262703ea504603eccdb3ac6c12e521f5f6a0faaa195bfa7b63dc13413bc8799d6f1a9fbd632bdb6ac737de5370f89ec97d5bc49f19da375e6d36b53b3a1a9bc72ef9a0dd3542ffb1b6a3b181c443a435767689e24af069b526d779535a9b7263ed58c2f7f60dd17b5738d43267f65bc18e92f055eecd5eaf193535d7c976237d26f27be2abcf794732d4fbaafd7e8b8c5dc81872ccff33decb0757e84826e739b1df6e21ed72a378fcab1076555ca0b8ce329af91dd170cfb36af7816cdbf83f108740f18bd89331ec91299dfa6513e3a032aaebd055c68bd14b0a82aa28f91e84cddd9162c8fe270e559a0765fb7d99a48580fc833fba591cc08632014f144645e80b738147c0eb42fc57eef880f86d6e5c27eea66f199d9f3e6c59cc9a47e1f8d0121f964eeaeb70846a473c31fba8b690ce3c5707e34a6e1fe732a87d4f403a638f1f828b605dfd7488f2b3e9bda03884c2a1e2eaf91323f6dba47e4b891c9cf6bf1d6c4f6943f83d85c8c00b80b8219aaf17335dafb725a4db1a499fc7f9ae393fa8e0856e9c4a64263bf9ac8098d6cacd536a773f6a046f1d24d6dad8d6c4f8dc697e6042dfb59ef68ab6fbd7e1be2ce9b601147676a9937c7f4bda5f983e7d2ec036314a91caa657cf428e66078face8bbe6abcbe31ed2686f488b13f243f1bc137a5f156543729e07188ff4e178649ee8380873ce6f11ca6ab811d241fb78bbca10acf56bcaf88610547792856694ec0d4b757d489bb13883191e7b184a9ef16c7a4006fc6285896d8617f1d70fb31b5bb956dd602ccde93e5be1be47c43937a074318c697ea4e5e92971be14cbba2d3121bfb6648138a8b85b1cec1b5bae4a3225eb61c5b8f79ed1ac9ff4a77b1d5bdb5657036bc84a54a698cd48bc6f9b9717ec8f1738ab72032f1d8195b2f3467f03999a3c91898687eceea8b15b218c11805348e0ecffd3cc36f6279d3d364151662b53fc0483c18c239ec7dbdede494b6832d28e43e4d6b0f53d988d4045b66efd700d7bb10ebd05c6f562495f47d54972ba72ad65839aeb162abae8a31f466e6a3a16bb4803d44ba88cecd7c555ab05866ac8f2bfa005c0ff176b447337558a0b639e5484ed1a18bbe13ed4757e6927e2ed6dcc1cf5c96c6e3a07036544722c945319ab0595d8586797e0ab6a43f2defa84e63da906cbb1889788dad8a73c5400fb87d24bf3f239d0eb8c6d014907e47e8f8d67c4b395d8849ca4bd36fa2f1b51f9a20ae0d694fc6e26cbc45e598205e1c036e41d717da1770fcec41457c0cefb7391d60cc1f8e1b9a0588feaecef149ed79051c20d2a959a4431b033ec23829cede82ee0c52cccc3adfb7d400707b5c27a64d5e23c41fc6423f190b24075329e75da14f19feb7f84eccebd96dcbbc3f3b9afb29c1f2701e5712637f2db679e2bdc34bebde1803fe60480cf9364ec436cb76f5f3f960eaaee234afa222cdfcb1d0dbaa041764e3581649c4585f8cc52de7bf4534d4b6466d66fbc218f2d1abf552ca2797c638ccc362bc51e53a6a936bfc024d4e073c3484d7f865893195913e121952bf79c68225c67ca3bd88c4e3b6eb2ba38d265b4332fc4cbf12445cdb82ca8f441ea43a36c55f64b950c69e0135c9f08d41a3ba70c5f549f73d31227842a2f7a2353b1658db10667ed1c6a07b682cf82d70c97b81346414ce1e9ab81e08c1f7ea87b05dbfb3f5601f5ecab4eba33ea9f28ca1e38b73a0d2fa6a5b8c7d2bf0cf16f9db9af95acaf79cfaba703d1c76678cd6a5ef38a2770be73358f2041fdb92af606c0f5e4b69ae8bb4e6078cd2da6be3513af7df77e3814dd72864262457420c1276ab0f5ad712e7719c6d613f68d2378c9b13b25c712dc6171dd9b71f325dfccaefbfbe7e3c91e70ab55e5ad692afdc6bf9944fa6390c89be83c66e6729f2ec00b8598075245ad3a5f53b0bb695e3359af2fae6eb23a381ab649af258101eb2906db45fa538f8f6637a6e0d96fd8727639ce7aac07eed966bafd88f498f3edfd3138af5381bbf5cdb8f2bf84ff938f5a765720ccd95be407b7479ff1cf041ab9a1b2763f07c44bf65ac7556d306e7e925f55d1ad59c3cfb3eb2c70187c76b59911739d66f348140c8f0d1346718f6815c3da6590d20f9da79bd36776af581c6efaa3577894e88ff2cc52ae1fcb1457c79617e6f1847729471406d6a1b548deb75793cabe90af3349cefe4fee37b54338fe4e8453c2351a53dc19037899b6a7060bf268df3c0b236b6fd8a48c790687edb7cdd786df7e2aaf99cc0f1338ca703fe27e82e26c0d9590bd90e70de7b9c934d3cbcb97d869cbb9c77a3d1f16c3053ead77c1bddfabc2b73f6563f2be51337adef733225f5a1e3394ded6e595cd6adeb28c5ff523f76ba0eb0ccf50c63acc33ef7b60699e786d8bd1a3aa57439168689ee0e7bc5da43385e45a275cb489cd85dde8979b03b64487da4d78c4e49ff165b559e211a1ee23a7383363af0993e16fce718efe64d6c73c94706964d2630abcdf667f6b14b6258de8ef1f73867d4655c46e377cad88ee02bb24a30e01c8c556e8ffa47b183e8dd86af49339fda936ee73b24a735a3ca132443e2fad68a4cea9166987c27cb175a835d6bbc3603ccb365b457ce905cbe26f6371df35c6384d68de86912aeeb9434f3435e3e7401e9d2d6ad7cee66d932a3e96beb44547f57436c61ed73dae6a0ae3c9ad7163b7b7fbeb75e2d43b4af5b567964be53c25faf99276ac71168fef5ffedfa599647fe533ffbd4cfca6be5533f4b8f4ffdec533fbbe99d9ffad9a77e76e5f1a99f7dea67b7bdf7533ffbd4cf2edeffdfa39fb5ae35774427d4ffd75e96aac088d3678d85e141e7fa1f9a34c4eb9de66ca37e609c23ec4a1eca7f80ee2451e5d90e70bd35c90586f43af12dd39be002ea2e43623e69cd0992c7effb7efaf6bc7b6d518f3f3d5ae5c0bd4c2b57d4e46c5fafb040e7bbac069c3b6b84112fdcdb5525e86975b93eeeb4269ac6889569bf06d7f3e7e1e326591e981cb37962af388a956a164b93f5ad9cab0ecbef426f4b7202a3dff3326e13ad2952673dc376b6dfc3491e3612e39061ffd663a11fa7790aa81d25cd0de51fe12a8f31596dde5d8ae150080630c8ec3503fe43958687422ecdc238f42315e7fa84712bfe272c58ac8f26384fa8a5ca3654ba2289111fd870eaea316a43df69038767758c975e05d93877e101edd9adf080389e04e301919c89c7dc184d7a340f16a74a3dc690862118ad2d555603055dcff0a6bcabbb75754cca87262f0ee9bc35af0178bd2d04dbb2445a8b54e827a22026a0b5be55956323e38331b69961f91fe3df08266d94bf738cebcdb0b5f96e2ade8b319806f966aa37f797e89d2dbfff6a59aed23ee889385725ae592df38cb93cd767e69a7df51c462ba636a713ac658adfa4b8bb6bdec9bfad716d721a5bb6d8ea423f049cd15b6576acc94a95271195712c4d627719eef11a1b12d279baa243e2b7b2b8bd9f681c8fdff98987fac4437ddadb2fcecba7bdfdd3de7ee3f87edadb3feded8d9ff3696fffb4b7dfaf8f9ff6f64f7bfba7bdbdd1f1696f2f1f9f78a8523f3ef5b346effbd4cf3ef5b3745c3ff5b3e3e3533f6b737cea67e9f1a99f7dea6757bff3533ffbd4cfaefbae4ffdecfc98fcefc6435d8343b91aa3c39cf395b7c6cd34c9c37cf53d237eab3edf372717c6a71473e91ce50ed13d3144ed5e8455ac36951384d9762aedb7b836da92e6c421988920ade7a473383721f69d4f07fc57c0f5609ab707e7591ce15ab10ddfd767349c1b0bbdc33ebc2c9be521b92aff489a77c49b40f599e256d8e298191395eb6d8b58a84501cfd25c373893fbb590eb2babf19f7e13c9239fe55423589c76f6099c171fad85bca6dd41911781cea9bd0a9c112ce5144a5ad4262bf795d6e1cd73274d07bc63c8735c078ee074663ee0fa079cc7a99ccf8ad3a47ea8c88bda7a98473413ab4b8ce388484dd30c8770d4278a8b28bf13ede311e8365be7057acb73f4e47923718e438acd24b5ce682e4e9c3b09e77c42df46f3078d5e6b6a10970f6dd983539abf91d6e4a078155207064822c43a25ce4b988d41292fdf7518498abd1bd8682cb7863cf948f12baa3c433a58bee756aea35679b92ed0e4ce52e5c5c7d45993dcf232cf1ac28ac85b1283f16d1a1a6b5c17bd5d5f0dc14e4057f4b27993f6c7b89c226e0eeb9c8ab42078d9c124c5755eac535cb53e69be3616903cc985dc5c48867e4df3d9a6b572734c515a3fe308bbdb6a7e85fe7a9e612d21c6e8fc4c5ae7076b9f7b4cead33a34593ebde6326dc31a1ee57baa7331e639f9f27cc1791e419a8b4d9a67186c555acc01b7e033fa14afc086519e48eb7367f56bd0de359552bef464e19ca2e7c7abe53bf1737d3d6923cfde86bdaaa4ad3be0e18ff18aa7324f8a552fe1e5afc1d215e9fe14239fe5806b6f6fb929571af936629f1de632eeb576ca4a3f01adb185733d7a6b0b74b13c62d3ba1868ade4fb80dc6e0f3b5acb718ac956388c43c6324e7b9ce0bdc6951cd539166fd1974fe9b8f21d09ad7527ec8376b949abc6b6efe675e28a78d60cdf4f735d5299e8f8fc2df6f3cc163cfcb910dae489aca491f6fcbe2d9d9ff507de38071827fe4a6cf0b9cfedb876ea21b70bdec11646ec166143dfd87dec9ab96f2df731dc385ff75acbd93cdcc15746e8f14496c03eb23c1f305d73684c6eb63166635ce57fbbafff0c1ff7f48190a36083bed117428e93755cf4518c8e7c6b771a7f443b38a7bb2b8638cf30d73b6802dc91d892672bc7bedfcf07838fa16a0301ae8b7d4ce5c6a5f41816fc30c44fd13affeb391ac7bce3fefebabbdb8cbf5bd998df814754edd3b96f0ae7c88d731f55b3fa3b0dde99aeb5a27f368b853bf2e1dc677eabfd78e7fc7077a229126b071c96c6da3c9ef533de695cd335817d5e0ba10f7506f5577cd488cda2d4e73bbdf3925f8fd618b91e2355f1bebfdc07858f118f75e35bf7784217f791efd2e3eefce506ff45f5d8e5f1b5b7f6f9561f153998228fb90f06e74a3f51f5b36e5c2fd48ef38665fd9afab9b5cfcaeb1d2bd27e7e736c5a058ddd836e4f65a4f218a475c58134dc11b925c23a03e585fd1bfdb83b458209d22be74bfe80fa02849565724847d853bc0183ebb315ed6ce9b7ddf8ee489189ce45ecd1487ec2b8c634d638abf140f4e3cad8c0ebed19e41bba9a807d1b582f4863cdd1378d5d3406e3147b7107ff3039f0b3d7301e3b3b52d7ae1adb91d74bbd15eb25f463305a5b638fd62f75ced810a8ac3a5ff59edbc7fa56af8f363ed98ab9b9833f9dd4a8d4bbbcad70d7affbd3355aa8c52dbf16eb4e1d32bc4cb9cdd57358d4535767f5c9ef3eb55161bc92ca0d719db897b736b546ca4745bc35c566b350917a87f16052f02f1b87527f9757ee4d37cb1777d289efb09f19427f07b8fd56edc2a92ad7d5333bdb9f2a5f34922371be069db3b706ae77338125dfbf34b75e0a76f6463573abdf8fe69fe4c4e09e2220f43f481d8eefbe22f5186dc916fc7feba22ff56abaa33eb4e35c39d4feb77f2bd8e6724c43a1eedbf5b24769bd8659dde3a371c5fb15ad8ba7221de26adb2bae4b1b931c3efdb8506b2bdd93c89e50a823496da0d7f312323f14275ea24fabc03fa8cd13edb9c338cdb370fdb8f6e39c27e2e765fd49ed63c4a786e71deb48e9b85cafb3f043cab318d0e5b740e87be60adb3dd1f3093d4bfb10740dd8ac7edd051e713586fd36ecdbf4b86fadd7f88dfb6bea53bbe2db4ff6d3cc3fc7db7a77b6553848eabe8e8cc010ac9436694da566b57e8f0f85eb27586e14fab12aa4396f4efcc39f79b368deac1b7de75136a76df4caab75d2ebf0a8f9f864f9b1de8af89ba564c4a05bc0c930e2a32acd58ba17371e8f537f56a3dc514775aa27ade490630c8c4ef0f9587e43eb0ce3cb4a354017019056a9be83e50b83832168954f0ae7e7728a3826c4db01d7cb6ae9913dae684f2ce2016ef06b1ee71a5b1ed7049c41459e41e20740fb7a3e0e8063716e294deab5d255548a33a4184b58c8ad96e236511b98f91e30fe21f5f38a3b551832ea72dd4a87a518a49ede5d40525b6e8d6da604ab87c79fc1759085274b955508bc058bf63a73c943c3851f466bf98ce606f3265bb0e4036ca3a57328723624329898a8b4fe2090c5d010e00e947159edfb88fdea38c683c6828a87cafa6da89f045f7723cf22df4f63130e542e09c7c23a467dc5383d9a53ab18f3a27343469367a4e6f05f5c637191d7672ee23d302e633cb0b1ee8b747f43b0b73ab72aeea32df7fa429ce1b08c4f0002eabf4a689cd654a5f5a90bba37c633052df38751ff37c19c907c7e331f74313f7330ce276143c0cd88ac30b04bba085e136ebfa5ede1f499c05b0453a9a04b518cdd14db8e30dd97ee699b234d4ff8b52aa1efa675ee471316b83d523f947b24351e316ed4f0714d5eea43cb30a32de5be144751d4057e8df2dc634b4eecfd72cad84585c6242a522f8d9b6e89692bea00291fcc31af69cc63950ef097d5b53cb5b1dca9b665caef87ac2a4f7a63a1cfa9f2b814eb89e452d0151385130f57c558df0d9bf59f9fc3ad01160b8fe9adbaf2a5bc03699dea13ccb5304cdaaec7425fd37c807f97edac321f038d2d3f9f87e0a69c00c4b7f19987a0e6f84fcf432064b695a29d0abf8bee1f778ac92dc81ec270a70bfb80ccd5d37f523c794e572d74c46a5a3dd94f8a349ba832e68194f73ca7d8a7db63579b63a72cd11d86da5598edf291fbb527848f2e799c93e0cded33043f45b020b87efe4deb911c271893ff209f708a73b9fb3acd63daf17e099c0c0383f486bbe1081b60a3aca5f448e2dbe9fcde8e2dabf6a3d2187787c43c3e46b426fd1df25964369ce29a44e37a19cb74cbde858f8bf82fac93a67d1c0fb14c788f5c21782cb11ee68a3b200c3f54699edb3f705ee145827d431cfcb8796c0516eaae01ef855dd2e4056c9f7fbb92c6ee97b7e68e58a56bedbce583c1fbc72df7df039b7467ecc0f5f909ee8445c27187642fb5c1f04e72dc9de8f06fc31e8d785b9327687fe0c7a359005c235497fc1f58b6a77bd4fb32f7ef529def95e6d1be25566847fa84d70bda2b20f0e624f792f498db2b891d8dd8409ec5478c53efceb03c743dffbe026be4dc94e3cd594a8f4e9a73e94c4e9ba29eb505eebe371e4ca8df797cfd1e792667fe3de28c6ee60f37e21e813b8c5479b653a4d95538f6bf074b74164361eb233e24ef5a6cc703bb500761e861bae8ce839f57d51ae8b1384617c7bf637924ad5711a9d230d693ef8e9163593c3d29d98b5bc56693f7dd60ffb8dd977fd37e733356a832663acbfd71d0843e8b6be8b8ab0a1c4f56bfa7a57d9eae076a67afc01fc586b08e8acf4ffdf9592d97ab78f9f5d8a0638ccf55b82ece86fac93836b7e35ff94eecbf21fbeeaa10f79eda96c9b8527b4bc9967f437ed7b358a086989e6be696f8ae30ed66e3178f9f495cc671dfc85e8e7d9e3610f65b83bb665fb9c5f673358627ba659eaede03afc0355e992b29360498fb62df9a8c4da57f13ef958a2ba6bcecc41f77266f52c3b9486b5c0d39c0c1f578c4b3c628f52be738cb0cff3e9ad9404a310c3bcb74fb31fa1fe739694877384f08a9d7b545cfd4b1bf768efda38d9e71952db8988fe22fc6ba0ccb796d54794c7025d9378db1fc9dd75b23b5dbda613f16db0c2340fd95a95f9ee04056d6295ef5285fcd1db1268d7328b5c246a901e0f6b68165b31b7228b5c2f3a03eb15b9c0fe9861c4aad785b96e765f7ff9b1c4a273c4d38d239697eb697e5ce52b87ea48f4406d312c9eb83e82f3088ced8f6dd8c369a6c0dc94873a764313734cfce11868af8ce5481f0c8b197e236dbd87bf80c0b46e823b3a352d9c2b609df5d14f41f9adf27f3cb9de0805ae2994e70427f14bfe165f45a9655051bd16481a65bfa79c9b371deb2521ebb16bede6b6c98677831cd7f9562ab8638ce432ddb5a105f93693ba80ecbf90f718ec6963a0eb1772c52df0ea221f48e9d2a8f238a7b4774817485f5d9f16aadabd3bc58ade6ea161b5d256ddd439f5b66fc668063f5b05c52acbd8aeb3522fe20cf0e809b05582fb9c65655a2fb0abc1de5cf7f0fb6e40e181df22d97b00e7b431213a4d318ae9894fd9e13a8737d56776737e57fa1f224922f3f082615ebc2d7d69fb87d5cc9732aed9db7c5e09ed071e53b323bb3000f37e149d09acfb13f5761786ec411dc2d86f23e3eabbf01d343de1ba498d4426d562cb315e25a733ff1edefb3090685c6d4e2dc1fc55c33542720b88676f94aabdf87f74a6c6f2132d1ed181ff2dc3bade5ec799beb630fcb471bcccf9df26564f8dfa33a38259bf55df25adcd9af7b570c1079de290eb280a7d05d11632dd338ee3b8dffb95a27e76b95dc292f08c51435c704dd3c5fe4c0bce3a49ec47f66aeae7b6184f071ba4f67381a8dd66628d431b9535e1abad6727c677c165373a7f93dc61c5dc40cddbc27519a3a5f17e54fca1795e1e4d0d81de7053beef3bd7290d56190ee56b384bc0ffb07a08ef4014e5c8f056a8321320783c654958c4049f8489527def598ecf2719f9a1ee4b81b26091ff7e72ff7abf141c7ee2e18257c44f7c8d7789f9a1fe4b80f66a9fcac5bd7cb1166e6a631ff53304c77a7dbb3b122e918a4f95d71de2124b71ce539ba319fd6df8369c287c0da3ad1b970fc2c920d70de24ec1741ba5056cf89e8c795313437e6b34de3d3885e90c61d077af2ddc17a92b33bc91f786b6d24f4ec5618a71be508c0f54273f9dda17e78e7621cd0f2c6789ef2fab8534da11b72bd95b113f78be72ae2a98a754ce457cbe0ec40e1ac729bebf3adfcf51828f2ded820fea924cd2f99c5a949a20dbc576bece531ae93ee6ba9bfe32bf7a69be58b3be9c4b7ef6747794e1a6109aae8f7efc34891f7a3f9c75895c631c6d7c4f716c68d626988ef8ce678a88ee3ce739e5c5947a87c94d7f4ae3166ea7a5a6d19339d8ec12d585e343f64af3bce3174dfd8e9e2b8728f194f24cf2bc450137e867d6a5518aaabc7f64fc55e9579c4d5b153b7e569bd098b45de7f63cd3dea53bb47cd95f459473555528cc63176f21a7e5c515fa5c23fbcdc157053131bb8061cff788e5edfbeefaef01dbaa03b891479fe15f12ae3c76b7bd9319b23181b82e8a9722bccc20d38bf5b7de74c36a7ffa918c1712d1ee6cfabcd57c823748c373e95cb8bb8ad5638a8492fcdaf90c66de05806c2ff225546bfe7050c1b5d5f120bd3dce548b66b8783c2183992ab0ee799499f8df6ca7e9cd523237b4ad1767a224fdc8481ba26af52abb11d32b4e6241aa300e9a8d7e4556ad3c72c078accaf912cf2b2dc5d9f57a9cd5a16444e93664c31c7d6157995daf0ad029e6bf79957a9214ff9ccabf49957e933af527e7ce655faccabf49957e933afd2e5777ee655faccab7432479f79950ac7675ea52be8f333afd2c9f77fe655faccab74d5f19957a9d5f19957e9f8f8ccabd4e4f8ccabf49957e933afd2675ea5cfbc4a9f79953ef32a359cabcfbc4a9f7995f27b3ff32a558f65031c30e1f775fcfab426558fe4364ad7c028d802b7c61fd586bf135f73ce4bea6c7837d56f6e497b277cfebbf7e6f6d7aa58c2489edad4537c726e0b61744f8463416d105392e342881d500d907c0c9c2c47503c2ef984b35c282cc10ee358a48cff4d12a31e3f49f99a9e909c3ad97e4172b254d4ed7a4cfd06f81d53879f917c433056dda7fafd54b01963c41f7e3a4f5bad2b3aaa3c89557901f5a41780a4bf06dcec30e5665be0cea03e5ad0bfd540edd25c36dce356c1be28239ecae83b59f21d49cd7cb691458b391deae4ce537960a23ad8b7c76912daaf769641b030be8affc7b84448f016d83f126a128be6198fbfd2e5d929c74220f5937ad9862fe622c27c19c904e83b6a78474bdf23fdc6863143b7ebe1bc0d3cf84b6d6cd36732de89312592019bc66f4d9757ee4923de363046e5f1eb78f8e8cb83e869ba5c775e0636781d303d7919faf2a047fff6835f097c7a19ee62e9f03dfa29329b97e5da7f1946d3b795b15a3d8b86b6844f12d7638114cd16ec62be10d9a7976104172273cdb38397b7a786f808fe712a45ace28a09704546955f23348653a99f4c65cac30fbe658c266c237f6b15df1460a4c988dee935690233ff95347cd4249605887ea53e9bc6236539ad9ad76dccfcfa387f91d0efaad23c1e3fb35b8a3572c1c1b7b4d182d147af5fa7497f63a0ef707bd010c4c3d485db29b7d82addd7adc2f563851377c688fcadbad033707c12dc02a71f2952cf56b95594e7dd62f37528bf46593e0b574c6af912e5fb6d637a881d523c7caec9cf3579cd9a5ce5f493c97d24a726c9b385f44820e3bc6611e86676ba0fc0b13b436eaa5bf1c57551b49d136ceab0b8172259aa8ff804d66955b78ff32c95d65243fb9126cf713d6e451643d43f4378b2721e447c498a4ceb76cbf60e08f0439317a1598e7509c7421fe32d0d0e1e9af2a1d4bea949ec2ec55952b9252ad408a776bf47eb4dea27ea920f80ab6e7f3abc6f8c163bfde06fa75c69fe634d7adaaa42ff434ffa1f80eb7da832cfd0bf5d4d3258dd25fbfe94636de00e3d75c9667335958b39aad8cc0ea9cae3eda489fda5a51daf8d1ea3736262b86272859cf5d390584795c778bf58a5cf49727b04cec55a336f6deb31b7e269a3c516a439181be4cdaac8cd57ba3fddd7f48467d1b8a13d142404db86f1bc2e44fb6aa849111c0ba2aba2b91ad4e3b2b02fa088a57076a9fda34e8e6c8cad3d937790d41426b6c915e0f630a563c20f868c210c71cc00c5bca6e3d12ce693d84b30ad1b29c6f5386fe46881682a5497df9f8a3e91693a7e3f1e91fcde700f2af950883daae08bff558873fee5d463cfda632c79a8ba2a921f9aeee9a738674975d19ac5fa9c00b1cd2d95d5488e2e446bb40dd651d9967ee3ac0e3fb54d531b23b62bed4ede81712f04fb7ec49b3319afb12da8e8c75797fc4f90c7a3c0e9809fd37cc8a5f35447fb09b2dcc7756b22a785f6324c9bdc5c15712fa99d8eece129dd631f18d5d9e93cf64335936773bf440bdbd676ea349b47b4a6d01ce63139197e0d92fb9be3468b6ba9605f4931207fe4b8dc7ea4b830a6fb6e16538df6666a2369fc4e128b90fbf2803ba7b985236836c6195e450bedb16da77be4af0618b64a0c5a0b5ac8b140cbc74b79ba32ac0ec9a98564c1613875f86755526d43dab7c8d985f7bda12e8b36183c5a248f512a439efa9b0d0e86aa30b37597ca95298f6fec8fe40f20b3cfa798fa998de48c74cf22f69794eed3581ad47688f8f78721edede6396578e2ebe0fa89b96c8851bec6af56964fde5469b605eea2b15faf465ec99e876d5ed8a6467cd3d4c60875176e55a457341f171c3f97f2b792bc30b0bb1a92e3077c64c868ffa239d03339a8c4c39bfba38a3ac0499c1bfa1b7ac0ed239d2628c927e53db3b97fff79d243eb5875872c18a17d0e3205df0b92f5c282dd172a52ef507c6f89f737a76f17742710e7b61dd86b90901843555603a53b0fa60eafa9f2644bf7c258950cb47770450c208e4d6cfe3e6217774512fb230c0fe31fdfad9734164e801190c4358953def75e96698ce1cad2bbf08064cea6f2c6917ccfcd1a7ee355b60bca57ae5f3f69bcd1c91e4ef96be5fe9de1085aeedf67f1a2293f9d96f08f2b4be7ecad81e91ead2d9abbaef99c93da169e11e8dccad23cbc7fdb8837a85db4ff8c333c6fd3b96d8d03be528fadc70cf21ce0f62c90c41f00ad777181641b9c57b6bdcea76ec1488cd4d52c54241889689c85bd6de07a15fb10740dbc771bf20cea0ed1ffa85cdc1b0bf6d6a8e5fbd9b722de15eb1c5ce3ba01c30504eeb09667b4d54914990f44a497734d6b869ccab51366385f8a2ad4bd1996e7d43c1693d2277dbe8bf4442cbb47ca32af55d0dc5695c947e9da42cfc0f12bd42e8bfd6fba87bee5b5b01e665b80cfe17cc21f8033624d0e1ac79393386ed6a6fa7c8ab3605499e861388fbb3bcce4d0146786e3904713a891fd8d05de042a5cdf032efcda582f2ac4179cb745198131e86d7e8e881d0ac9d74016718c26f6cf7968fd4d58a4d7ea497f8d63a107fd8326e991224f3e348c179a31863c81536eb8d3b06daac7a9528f213165bd481dcc8ab6c24698fed6eb5f8802e036d38d4fd6e5c098e23a04a9cf97be338b112dca3805bccc6a2dbe894de920f361ac529b484a7747f97c1f8bf62e1c97ae493d5a37c76e8c63a471e6a4468bd45ba7b1f634cf3fd209d1de7330a409b19d167d97640ff9a1483d242b34d44f26703c1277aa80714bf1f819c6e3e7990d24319ce358cabf9d06b19ea627ec06cdb5dece77d358b70392c82812e231cfd7d2e29b816431a4570d321af1709eb0fcd9977c5f9e26cf63ed6053bfd76c0b249625f1dcd8a68c7408c7407aa3f7ba55059153a5dd56e7a037958689c2d98121881fc6484cd465dfd68535f179b998f6b7c07b8d8134ff287c4babf5dcbcaed86ca74acdfc57556388f64d226bc3388f43443a34f651580a67dbba3bfc40fc5793678c26cd0ecd6b1721d986eee5853a41f8b9deda52d27a1db2c868423f39c651b4c649746748d7b6556e85f7679dc372726c0cd87cbfc73ebf5980f359788bf4fc0796591af2dcabe2be85e187c289079d61716e895b72bb4c98f2b3c8debbb035a207219919dd13909a54b46d1b8ca9c06635c3907e43c6a828fbdab6e1ae6ef62bebddc556c77e1a6c133e6898367acc54a63423bf7e28d2ec43956787a944be69fad66c1d917e5c81d1bd1a9b7b1d2617ed038a48f7fc1639fc2ad6f2ea28ff0c92d9908ec9ea5cea3ba0396bbcb5a54a10ebf4edf0cbbe35971e2d95e846d8b62fbafdd09058b8e27ab68ef365cc33de351ed807e00e77986e06bd03da9714c98053377ca46b58a2ebef2d6bd70a1fcf5873576494e5da7a71781e383cc4f635227bccc5f5abf5322cad77a9a4a3a0fbdaf4ff19e78c7d247cb0e78d85198b68182c8b18a47e26af507b7380f4a03c661fef05edea72757916e73d21361e1e8c781ff599c4344ed669ad408cb14a752771162b32c6623357c51ee0752066faaf2213bc94ee42ac87a9ae6893bd8ff7b0cda5140fd8b31577dfb2ce927d4a0bcf68ac866fa93c8874f3b9d4eba534b728ae1d3c1e6d72f0535bca68b2355c88f33a603f6a774c6273649b41fb8d22ed88ff7d34d902618ff4cd0f745def8a3b5de8272dc7f438972459ff4b3e957989ad6b640440d8590aad198863a25cb19beda5ad722b4d6cbcfe31861abf1fcb36e55a76c7b8754ca356ea2f6f8571cee3542ff513db58308e7f3463f511bfd53d8a13247143edfb49c78cc40620196296a834c79f92d74e7315098648fecdc6d85d9118d3eea425869cb7694c33c432dfe011af47223fa92c591b3bcbe056962eec899d3ce10f86cce377e1fa917538e2f2fbd68abcb0c7a30ceb48e5f442bc9530819a30e434a99f14f2dd101ca68ce3c91ae38f08edb038664b437236b78a1be12428cfba3aaf8b30dc692b23015d71d736b6e614bb3d9c2fe9b30af6444f77fbac3e28627d736c48fb589809243a30a903aa4abd8f0cdb73fc7e6abf2efa70af88273b595b4b0ec66ac9e60ff3b5dec53170f365d6eff6f95e16188744e22e686d5e461360a20ed89d224f1833a3c59d3517f9c9a23bd91af2f7347e3bc33bb5cdc775439c04d65d6fa71f6c2bc1fda03809241b1ee5505a598a2b921acbc4770e913ed2b6c6e02df91c708c60dbfccf15582245628b76f798fc2ed7f73b43ef6df3bb5d2b635f15ff325d127a683ea60c19d3c6fbcf95f9e8db60ec2fd1e9c0581e610c8b75af281e07c614635cb431b696970c2a7b1572e3f98aac9ec440fc39ba7b11c3d79c1f5c9fa7ad1de6bf701fae058cf5757718ae6ec91347ea6ff5de38e58af8fdebf1c78523ba43bcea4e9117589efee9f0e6cb70b7791f30c1afc4f2336c708e13fed7cbdb53f03eb0f5290c77d33768bc24ebe065608325c38ec4213f94a575f03e8c62436237294ef97d600375251a573d7bb9ee4c5ac7d9df199f7c797dbf523aacc4292bb25dc629b7ef4b09d75caee75a8875bc758d57c431016918639b8034db0299670d611595f2134a996d0beace53cb3c47b7d409c9ed95ed733bde12a377ca4bdac51ce4472186200048bfe2c42b6acb3077c843ffdf129350ec931595699e0d80378f40771ca5e3f4d321718f2d69f6d4decb166304aae287b2bd3d8d1f6a4d2ba578a3e5d5310bedf35354c5380cf8c018e0f8768289233ee18c076a0447896d6bedf395f0d0c458cf596008fb5e398ff7ce02dd85afca93ae96e5ee1ec6630146ba4073b5503bdc54a23e932bfa9ce2caff77c4651569feda5c26d7cac7799cef2dfe92b335cc47999f81c4ac707d820591c7982edbac5bc5c558f158fdffb8fbb6a646722cffafd2e1f83f02c266e87f5745ecc3305518882eaa8b2a30f6c6c4865229670a2ba56c49696c26eabb6fe892f7bb4d4fecee0338a5f33b4aa5ae47474747fbe1ebeb23e4d277b993bccd1f53c5976e7a3f9c8446bff021cafd40e4f573c4dd242addcf7f4a7531a5f863ee0e3fc4ef794bd97cfe3ce0fef46f6959e5fe6b0ff30fd37e27f8b03bbd0ff185e1ee33cee44a63336f75a7997dcce8748ff2916df375c45dddf5b10096cf07a4e342ed7c40a18e0ff6ffb57cbe7af5e6e63cd2b97740d9b9b670bcefb542fb38d4af5c7dac28b6b9b26df3f27beb1dd987fbe96bbb5b9b5c2d968b5dbc2a9e1560a9ef2f9a1ce13fedab77f1607cc2e6b6f5c6f6b77a77f0817ecbdec30770667bfc6efd233f1f64ce9e25b9bfcf0f51d3ddd487df9fd5eacff4cef8ca2679f9977cc91d7edf60ea83aea027bfdc7a64eacee014cfe714daf660dbc9a66f1c75e7f43bddb36df6fcb36f7ab23674e9b79bbb0e56cf7adcbba7ab7f5c6dfc67d3f682e5e17ee475fbd5f306830b637bb55f993daf63ee843e7cde4effdec73ff2b17e3d0ff6d764fe7eb7e3e8217c47dce17ce4ddaa07dd9365ff8ebb9bf97d75aec7b59fa3ef5cd6fd2746ec80f1f5f3e700cd68b29aed68d57f6a615fd0ad1f32bf47261fd617806eafabd09b1fa447d4eb74b3279e9efbb7eb85c675856cbc1b79fc3b3bef5236f3d83feeee3c722bddfcdde8cf7afcbe6fc1e66efe21f16e36c12d7376d0e42f59cb1cdc2f0ff3df7695d96b7d9bed427471ff7588ffb4ae3e70775ef1a5769deef9187bac373b37b9f132bb536d948d84b5e33cdea7446eab56b217fda6d2fd2fb4bf7fb1793edf8db08b38d0a74b7a1e66ba5dcd1f878f8bf53dde742feddefa552cd8fdceecda47e7cfddb990daed8ed3b115ee1c4def07347608ae5e9e0a3e251f222a57cfd9dd72b1f15bf16cce618fbc13d09c8d37e7f5e0e2f2c5bb79daac16dfcc3d9bcbd92e848b736bdf34620d76d8f89f95efd17d25b571fb115ddb3a70bade5ccfa4d7562b8aa2a7c49e95b0f71e8e29b7c7e23eeb7556df64b9b817e9bdc8f62cb929c3e1e3d561e77047ea16f5f8747dee0f5cfbb49c1fd0fc8dfbe5cb8ba73d32765d760c41d134d5b1a6ef1d68f79d9e812eee69e736d569d9de5edfd1e5e29bb277e9ff5bc6af92cd751a6ff3337d1be613e7301f5acbd93d4517f7660c3ad2eee1aa94d6bee45fdcd6e3e2fedc5f5ccbcc0e7e7fa50c76d49856b6835f46d72f705638df74bdfa743b0fc3eef363ef566faefcbe286ff161b37afea2be7c1fae3b38e46e8a8365e1c3eecc7d593eeb3642cfc7dc69ff5ef71e1c626b71ec3eebc1bede6c79fddfb2adf82bf655eb72d0f7921f10773ff0f2e261ba5cbc56fc286676b4532f7aa028da5d8e5d0fa67d77847fa0c364fdb9f13511bbf367c7c8899ffce7bbbd59bf7d2ea469cf0297e68d829c98ca7863daeedd8a94cbd5f8c4c8c7bddcdecce82373db433433e77b8dcce38d3bdfa3ebf293b9a3ddf9c671774a93f46e502d4b993d77fd8ea7fbf3e5b3b10d1f7c26ffbdeedb6d94cfdc99f86fb30f496a6392af4577237595fa9d96ef767e4dbc8ba7732db3d93307badd5fcd96a3e6c963ee9bb992cbe7fbf3c79bbbed327a7a84a3e4e7f632fc31bf7ef3339f29e68ea7bd3733eb4b2b1f14caf1b8fbf71f427ffea8fc391d776ea1dcdf0fdb0b98ebf5f9c3238aae1334b3dff2a4f331d626b871df53a7adfb0455a9ef8d6299ddde3cec978bcb3737f78eb67bb6f95fedbdd979a0f95dfb9b3a9b8fd08bacef99ffbd7533d5f269b89a8d58b767bcb571f9d65f4c438f4cf7abc5f566b9b893abef576af57cffa665c682bf3aa3d35fcd9fb42c2c0fda3349c783b9abff9bbbd063f76e1e18bf9779a43e557fef9b6e8fef50864f5e4477fee25166777d977cba7c3661c4bec9dbf934b43e0c47de3f6df36ce735767fbe5c5ca67595b6a174afd9dc5d9eae5550f414a2991ecf87f8c96ffad6e25cedbfb5d49dd9e782cfdfb2734f68ff77f2183dbdc1e7983e5e3c84f62cd621fbde997fc9d427534d6eea9adf0fd9a3299cbd30f93fe43ee323dbe6283d44e9efc8bd7d97efe3c7f8ae33b28f8536454d7e0f6917f6beec9b55e8cde9a674a7fcd07793cb473d0eff5bcbb8a0cb1c278b9cebb614fa3723fc5115d681ff53ef66d16b4d38bf7e3bea9cfaf5155fa6774054fde1cdefa788dd997101cdc310cdac9eb84b0e3e604d35c6ffe4b875d8a8fb3552dbc3fb6fabe7bb1fabe7bbd9eaf9b6670c69906fd9935a464feebc67f3d89addab5438f3ba7c7e385f2eeef910fb55347fdadfde389f4f7dbebcfe325fd2c3f6d27f376b385d96771d7def3c2b9b6f56dff9b832becaafbbee5a502d75d69a97617db3cfc6a0fbbb7fff7ef5ab39d75b1bd77ada6e2a6737ac51eb7d3693c9b33b5dccfd63d9da31d39198b97055b89feb69fe942c1797f56f1fb0565c3eaf74fac697c0a3b90758cbb66df36c51dea789ffe94b8b0e6e98ae2ed3ffdb6f6f5d8bf6ca0edd7388ba9d5fcfb48c6ee4c3a73b8ae6bb7839bb6e68bbe7b53cd5dfd531feb4e6c3ed8d15db4f4b3a7eeec32ef05f9c0f8b9bd4275d6e7ffcbb3b3bfa955ccdbe64edd9f5cbc5b75ff59ad15fe47244e607e647e1bc54b57d5afdfdab3f7fda983db1623b703ecd6eff719bdfe3787325fde7bbd0fbc4835be2fa68453f767bad7c8bb77bddabc5c3c2e8b6161f12f4c683c5f4fc3f262793180accd4e4e3bf267f6c82c9c7c9e464720f23ac9f7efefc793209b1c09afa8988c9c7c9ffbbf9fae533083890028180a830f1ce108f404418e1f6ff298fb1808a0bb0493c8c143d35d19393c96d1473a1fe802a9c7c9cd498ab68978b08123639997ce2c866ee071401563a2bf3af7ffcfdc70df008abf13e70ae8ecded17a85038f9f89f93b3c93f4f26df15a478f2518904bbc0038692b3c9c709e3ea17c2a4829462ff172f51bfc02d24147a14ff42d82f5e42a8ff0b8228c49393c99c5f138aa54e577fd959a05f156f02ecebc77fa6856400c51c43b1f1a0c21268ac989c7410f57fc20210e1a882ab973340913f39996c7e93673a40c9a948982211d6898000332c084294f05811ce640edd501e4c4e265cea3c7fc2b1c9b097ac4dd1797b853516f12816584ab0a650e16244f046e262f88d12cf849982846101420ce352042552b908bc334f621f2b9e3d00685f690388c4a1292617f68b445fc23c805139e8cf2e2fa71f6a1180308505831460ff150a5f56619492581194c784112c84327601999f28421b4832f114c53921f22ff380e62b84d0df0a81e207c8104e4ba1d9e5afa5f0e5745608575ea968a19c7697e71fca21106fc86e7232f1a1821e9418c83f29f005d99ab2c60c719fb0a0f008a064d3625873fdfab7520c6150ec8b31486e8bc1807bc5608877c5e08bee8485706c5a7d16dc45baa4b1105ce82f5b53a8b3b78e54b96bfc9160b1218a5f110ee244604adbe989a058a2321d4a2837784b500802be8594f87a4c29637cb8c528d0805319e357a0ff551081202f906e21787955a76668285213a908d3ec61124146de70998e23823614138d1058aa75427b01c076e322680b591cee4cb99ec6660c2cd18390fb52823d8c2aa907fc94f240e814458dc263cc604c405611cd64fdd2989b0ed18911788d056608b7a2648c513b51895a0b28925f6150234a05d10698ff559a97acd7907260a6ca0a2de020165c698c7de802482ed406ef6be543a16ed89dc954206a1fe3be640c0640b61f84f31301f51c3008ac6710a9601457d13ca018784ae05a41194ac0d7c9db5b1309c644828071a908025f63ccfefec7ed76d68bd4130ca1f5d65403e29dc24cba39ae08153878e10c4b102a15a7b3783700f8446e1aa024f2a1d0820716d5befd827de29d2bddd0628195da03a5e5875e909d0a8b18dd6d8972324df535940401514a27fe2a48ad9745905091000ce55ea70374c3eec3bc50bcebc534bf6c844853ef5a5544368b46309603a10a6e3067a0111ae218be5332604da8c2d561af596a1b24d9e1c8c3fe813260334e2a9fd7f2a794996d44c2f02bf15538549aec078110d3b85e222d6081254f04aa0e6845293ee060fbff8dcc8a04f6315304d2417079a185b16150ac06c148c06acd39471a0c4c9a4b33477809da6005624e09da8f8002c4994fea037595490f51dd08ccb6dd0002a341f98ba01f919eecb08eb23500256075b6af425e09f511148d2d305be599d2d703bf893f8b083b237c3c07d84e7b9910259829f723b1025b2cf40c53ebba63588144218e1a4b62680a7a8af6877c8d5d3c9c4a52efd50a85985223cb863cc23ea935f814a187632512a492da08ce7d2c98ee3988339408a387684108bca618a95995ce1464704df78c69d14c55fa3143afc027022355ade3182b2c3c9e888033d3172a6ddd74800659556294087caa0bc774fa6eaafe716bbd222a24822720e0b1d44480e2a41b50efab5544c8a5ea46649315e251541d1caae0daac5105d4ba6b15100b8eb0ac165ebc9e5e00c43d019b08b15b9c05fc2ce22ce0be77c64500ccf3a95d6402cfaef6fa20e61fe2be5d030c01e70a8e4170f13a14a97bdb106c2c484414d9f6817706be735f68fb1407d0d63f073eb79f0c6228a49d8638900832960614df605b865a74372fd8815487a2fbc3ac85e851b8c133af858a428842383bef21c79ceea717e7972db0ba2ea409d59388942150584484415a8530ac80d32101a4765a666f82e878f32f48eca0d204a81554460061ecd6895532f1196c8a8f138f122493f5da28584a74aec585dacb6c6c566255b2dccb7464a94667859c3009d738c4d0778da3024c583d33a6e40a9a9e76626bd69a518018b96d4dea792933248ce8aedd08ca3f4dad7feb7cbf966a6b356b287614071ef18948ea6dd06094804caeb9881aa92e8726894e006b4b2193b74b14126120ac26d52e61cf0af46c0d9eabc2744cba441c8a7f25a227fdac8c7d2c91d3a30c44f3d8f5a62170e5549e43d0d937f878bd75353e822bc252c2003b097f0ca77253d61896de1ac97932116400784d30f5251743135f138a7da7c91c08cf26b301700a83a1390f3023436b9a44f1d0ead5a2e7f0e288050c2238103cbca54835b8029d88de8dceb47fed10272cdb081718c51110a98c4abe8b25dd27d21164ed566743f1bd9568f5881bc65f19806c1f7bc3e1a9a6720c4fa6b0744cf12638230c10b63edb9e9763c8995d2da5317b18d133a38a0ca10cdd0f803ec5e2228d0548a03cb0362beb50190d7a56fbde5e61488362949dbff32e1529d79eb3280adff60207781717631956e97a398be3d20c26c5a898d3520eaa2cae5550a24ad192b080e235254158ca8bdc4b04294da5865c3d86a5b2db0c66154638c856456e3311c604403f2252377fd7fc4c15da85e900948715ac42e358d6f96d643b5c5366154ae21355791fa471584b2151a19660504bd6abe4a64c242ae482bcb5a750a43627c0752de879a6813da7cdfa98670d25e14185c25aba696c438a8e346b2a2e848596f6905146367223ce854f58736154888dec02d7d87c2211df62b16fa9c422bd214dbcc54cb56437df4268a6af297fd54b0fc169cbcb1956af5c6c9a2aaf446a489c6971b225554b6a60722ac3469af020aae5c24536bdc5911a529228c47ed2d8244ba4a6544b80a6b4b1528405b28d5d7101837a2bc8e3bbb9ea6fcc2bf914c64462b1c50515610970285f35b7e3584764b9a623cc9e8ee5cfb594c7256355958795cee864eb2517411412a6070357dc00ff99404ad4be0f96caed5da0082bd80349773e7a60cee0c0ca8e1d4069de592dc176184858a6bbf50fe129051ada44473283be0971960bcdfd20f06782c53e8602465d956317521d000a3d4cbb004ed8ed47d88ed2d50c3220160452f266b423c3c1a97dcc088e54401ec72530e2011b9f3fa9048691d5258d607335dacd273135baffae02482d25dae856454fb951e775820a16129db8dec1c1a0d602469d6599aaf5a5ea45f5b401a7f317014eed7d3a91acafba0a5b049d90fe5e626012abded232a2390e081af40583c6960ad28e0a7df857487a3fdb994eb561fa07b4d78e6f542111fe7fc550a83d5873b1c17e6aa3d3d108da9972edc17813d12a749348c5236bb6d607019bdfa48fe321a9a5503dceaf4910c118325f62247047b6ebdc9b74aa1ac5b41d83ce94c6c57e3d8a0d3815c341bc95aed1cf5cb4636c618a8559e677d4535d84b172d869c0f3c556271118532a3fdd06ad03f77a44424da44de261c1b0c2b29b5a93571b414e6cec55541cc05c913dbb52a8aa35fab1a313af2cfdbb1806e8463ad95b552663b8467c60ab826504d3a8d735aa6386b254b534a3f886d5605da733003c3c5b6d1aa00e966ec55017639bbe6838cf989755b44b1dd82ea5d340b6e1196b535175b1742c833bd8ba155a1d8c2d7aaea11cc373d8a215ebe718fe8a361d5a074b4db5d68f1df105cd8ab80e8616fddc508e1159ebd2e675b1b52bf9bab81a747f83e007bda3f56b32c5868d2acf5da3193ab3d7c7d999c7dab2a340a649405851a9a6930678871b852e81a56a8bafae5dcad408c671453676d4f6158ac251ec4e97d5b938a73235b66da1da70f5185c334497ee4018d0796a2e8726747323b5c8082b4150a3046b01c5d33075885e01c476dbb046b4ca0ddc45e48c09ae5a5babd555e413412b2637136da69ba33fb0b9a60c6083f7e55dc30a5dcf0f7f26382994823ba45808816d412ad2dd393bf4633585ce36b20d90da369a1d780732f6e366133f28b65d1b9d1f66b25989ec17ea1fe091207f342a0ef3ecac5e22ab19d13f204aa822baf1a7117f265c61df2cbedc3111ab6e490dd00a8f5ac2d910fc02453152ff4bb7884b91ae88b3b8820d958e8b60465678a7d2a2d0e144507b2054ff4b07072e4162cd105dddea1f634ae2c2b98221dbc6b60f40ee99823b1dced444e9ba1219c3db34e4632f090ae16ce319eaf52c6aa2b86aa8c54b73f64a92409e654d205d15a70d04325f0273a8b707caa4824c7527887731646edc6d47ad2152dcac923b30dd2f0a8c5eaa83bedd74d2c91af5d12bfa8d0e6c0403dc8d28194075422977d68bed9054f1d183189c7f8125e9ae7c816564ce2f774252bd483b48d9c3ee9d903cd3dd2da00874bab2b178e0e3354ca81ac2edd4ea4544be15746ab4cda73e59afc1f6026c214daa05e1b4a4cee0452a81b8319b914a6859503fed19723f7957774628939389b5d3cca58352d89a47eb583bb2e436a5a96966a2d6d35fcbe1df4c50c2b5c66d31f3cd09bb4e53e801a882317317dafc787bd5f7ee0c971ebdee0227628bd383ec1db870e3afbb1175bbed0e70cf17ebc9c46752ff39bbcc0e60d550bb17170bbedbf70073fbed369433e36e22e786d74dd4160be35668d1d0b81554b137eec519b3e37f9e4c7e60a93287142ca1d446652e286cd417eeeb4c7efcd764a8eb8e2f90b0d457c63bf80d99f32fdc3f2a11604e54f826ad27b7d0f938999e4d2f263f7ffefc6f000000ffff010000fffff69c66f9a0840200`))) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How is this used?
@kerneltime here is the explanation on pkger file usage. I use this library https://github.com/markbates/pkger
|
@kerneltime PTAL |
Nitish, I pushed a commit and rebased the branch. |
@kerneltime I included the larger yamls (crd and cluster-role) that are sort of the moving parts and can change in future. Other yamls are smaller, and mostly static. Adding all the unnecessary yamls in the plugin will make plugin binary bigger and doesn't add any value. Plugin is generating all other yamls on the fly, there is no replication. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This error message needs improvements
~ ./kubectl-minio tenant create --name boring --secret tls --servers 10 --volumes 10 --capacity 1Ti
Error: the server could not find the requested resource (post tenants.minio.min.io)
~ ./kubectl-minio tenant create --name boring --secret tls --servers 10 --volumes 10 --capacity 1TiB
Error: quantities must match the regular expression '^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$'
Should fail with volumes is negative
~ ./kubectl-minio tenant create --name boring --secret tls --servers 10 --volumes -1 --capacity 1TiB
Error: --volumes should be a multiple of --servers
More undescriptive errors.
~ ./kubectl-minio tenant create --name boring --secret tls --servers -10 --volumes -10 --capacity 1Ti
Error: zone #0 cannot have 0 servers
Either this should be fixed in this PR or we should open issues for this, make a note and address them quickly before our GA.
~ ./kubectl-minio tenant upgrade --name test
Error: the server could not find the requested resource (get tenants.minio.min.io test)
~ ./kubectl-minio tenant volume add --name test --servers 10 --volumes 10 --capacity 1Ti
Error: the server could not find the requested resource (get tenants.minio.min.io test)
Volume add says its scale
command
~ ./kubectl-minio tenant volume add --help
'scale' command adds zones to a MinIO Cluster tenant <---
Let's consistently use flag descriptions without capitalized characters
Flags:
--capacity string Total raw capacity of MinIO Tenant in this zone, e.g. 16Ti
-h, --help help for add
--name string Name of the MinIO Tenant to be created, e.g. Tenant1
-n, --namespace string If present, the namespace scope for this request (default "default")
-o, --output Dry run this command and generate requisite yaml
--servers int32 Total number of pods in the MinIO Tenant, e.g. 4
-s, --storage-class string Storage Class to be used while PVC creation
--volumes int32 Total number of volumes in the MinIO Tenant, e.g. 16. This should be a multiple of total servers provided under --servers flag.
Usage output lists --capacity
twice
minio tenant volume add --name TENANT_NAME --server SERVERS --volumes VOLUMES --capacity --capacity VOLUME_CAPACITY [flags]
~ ./kubectl-minio tenant volume
'tenant' command allows interaction with MinIO tenant's zones. --> should be `volume` command
Usage:
minio tenant volume [command]
Available Commands:
add Add Storage Capacity to existing MinIO Tenant
list List MinIO Tenant zones --> list MinIO Tenant volumes?
Flags:
-h, --help help for volume
Use "minio tenant volume [command] --help" for more information about a command.
Default help formatting is off
~ MinIO Operator plugin to manage MinIO operator CRDs
Usage:
minio [command]
Examples:
# Install MinIO Operator from the official GitHub repo.
kubectl minio init [flags]
Available Commands:
help Help about any command
operator Create MinIO Operator
tenant Manage MinIO Cluster Tenant
Flags:
-h, --help help for minio
Use "minio [command] --help" for more information about a command.
Addressed comments on error and help messages. PTAL @harshavardhana |
Sorry couldn't find time to look at this, will do it tomorrow. |
Co-authored-by: Ritesh H Shukla <kerneltime@gmail.com>
func newDeleteCmd(out io.Writer, errOut io.Writer) *cobra.Command { | ||
c := &deleteCmd{out: out, errOut: errOut} | ||
|
||
cmd := &cobra.Command{ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not in this PR but force delete of PVC can be added.
return nil | ||
} | ||
|
||
func tenantMCSConfig(tenant, secret string) *miniov1.ConsoleConfiguration { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can this be renamed to tenantConsoleConfig
on a different PR?
DefaultKESImage = "minio/kes:v0.10.1" | ||
|
||
// DefaultMCSImage is the default MCS image used while creating tenant | ||
DefaultMCSImage = "minio/mcs:v0.3.4" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please rename variable to DefaultConsoleImage
and use minio/console:v0.3.14
// MCSReplicas is the number of replicas for MinIO MCS | ||
var MCSReplicas int32 = 2 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please use console
func tenantMCSLabels(name string) map[string]string { | ||
m := make(map[string]string, 1) | ||
m["app"] = name + "-mcs" | ||
return m | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
tenantMCSLabels
to tenantConsoleLabels
and -mcs
to -console
Replicas: helpers.MCSReplicas, | ||
Image: helpers.DefaultMCSImage, | ||
ConsoleSecret: &v1.LocalObjectReference{ | ||
Name: secret, | ||
}, | ||
Metadata: &metav1.ObjectMeta{ | ||
Labels: tenantMCSLabels(tenant), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
please use Console
instead of MCS
No description provided.