cainiaoblog 23.2.204 → 23.2.206

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/appConfigs/config CHANGED
@@ -1 +1 @@
1
- 1A399589A7FA0F24D60BD94F13E5AE8115690C5A589A312CDB7990FA047720BC82797471F64DD1F668BAAEA97B424AFC036B654B211B783DBD8EBEF0187D49B74FE42AD36551C46026A4763B7D2C5DA9434AE8AB15CDFD43FC924E60FE0F53BA18468531EF46D9137414A3BA203652DA5138ED819550C8013131BCA455D9DD52218372692E708E2A9A9A6273F7495DCE1CDDFAB4A01F7986FEC02B993AC0130210257B818DE3A4302A387F4224C0941C0CEBC1609C68A74DD2C614106F1ED6E6010FD1FA3F703D60016FC52FFA1D5928C480D4B5AE83FB824319ACCA8AABCCA056CCFC7626E140FDD7D93C355816C9022345D4B500F2DACEDD22FD2B73F92E038FE12487D9B3290AAED27160B8005D3CCEB482E7797823990C7FAA3C55D54DC373F6AF71C5A50C4EBD7BCE0D45AE006C24733131F4E3E56FBCF6AE2337BD64D5D5996EEB65FE7F7247E0119C19D2B0FCB201F4D6E70CE8552B76B4B7C13CDCC3219F5E62C61C3551A8E683888862D247C18EFA2B958654C68EEB6B70E0895FBB7590725BDF2DFB6B31F41873D38C08564BE80FE33A86839E1D1F8FCBD9224DDE5411DDF04D48FDE3481287EC7D7456DC75C2EFD5E7F2FFF2150AC310C462032C4FEECE38E827982419B02F20D0941FC909E859E8F2D34ECB2BD0F28857A14490700542D4DF5F90857C4F7F674256928068834170BF4E7EB985251383159125FCF0057C9A80AF7E4181A39CB0481313DC23F86B886D63FBD1D71FCFE962F8041A660E7D46B58FAF136F70B190060CB1ECA335CC044F4825E90DA3A79BE88E31480D0BCFFA4B921724C693049A8BCE898F6B77B1B3085DE9AA3CA43BA63CC580A2DE0D7FD4D0BFBE903683CDBAF92D0D40B4432ECECE5CE35E7F7A2CA9242AB15CEBC1D3A75AE20E1E35437FC615B39EE45AC09AC9A16EB5CFBB7787D4A8B9C0D56A2B5806562774F9494750E07D4BA0ECE4EB2AA7CA8D0356C79E01E33950711814BDA1F8C78BE4AFD32628E618973C6D04818FA930C08628266F27DD95CD6F91D16375E2DB08A324B080185062F74E8738E871840AE8FE1CF0207D3D79FFE9C006B32723359FC25DE9D5431617D930BFA9F12F03F854740349F20CD814C0F9956F34AD1D2019EF4241A17C2054F4EB71364733E31D99C6A961EAC07B8418A56B327960CB99E8410BE95BE732B5463A0C00EF98BE228200B6AD8A9A16320C6141E74D0C35D3B74EAFFDCC9DB9DB01CF2AD488788DEAACE6670BC936E051FCDA8CD523EB7D8F745AC0024BAFB55A0C69919766430048A772A3FF0BA727CD1C5AA4511DA2FAF726D9BBB15BED0A6B26A8D5B85954DD49AFCE1A4BEBE5DAA9F1BA747AD61CF414ADA792AA03770EC0FFEB7E6F3036BAF4E7D15BB3EDFFA7E5D2A2641785290259EC2553F0A85EB332E34C303B0EDBDC651308940100C09BA60B3D99AB01898E168CCB9C60A479CB52A375D15A25C77A42CFCD39EB5E2884569951B2B7D46FF859CA601FBFCFF53D139545D638A28888C8360D3F3A96C3485925889DBAF83B939BE35A81A26A4C33F965C0354A967546DB2EF8163CDBEE987BABD0782F86C1DCD8CE44A0A2768DDB7175E8532EE075ABE920EA6D534F17196402A06D4A607C7DB4E95550EBF03E1707D645F74CE2C59C188F85E83D9102A0AF19F1A2AA0E1C9B9638F73C2AEC2F246CFE4C7FCC23D216973B97542D23DE8164747E0DA14FF0997AB360031A7F28E1B4D1DC65650BD58E49C0510366CF48C84F857360CD3A1329679AC0E63D349D500722CEFAE150CF5A77A969CA99124C9722CD93BA38C372A7756847E02E0AF90511F2643BE81B15196365ABC6BB3BB7CEEC54992449937F4968F92BCDE7B1763BA60F11F4ADD97597F8A6A57A77163AC4A0DDE0FF2067165AD937BFDDB72805AC7F8EDCBDB520FEA695D1E9E2EF341B0E2D96B291788D0C14EFC743ED76B06D7F422AA8F754B06D1D4EEA7F237EF7717B76FD8D10362A1425684D829B422AB72E45D701E65AEF6C1367A18DF6408B451CD4EA46FD7D2C44493C4C90532E2A47E8D3D5243BC5F28C7CE945765E27B51D5269DED2AA7A4F26A67643D6A37AED9F9473230AB17DAB1D347AF30D2C08854DB002FEBDA419D5F6FD876E22C04EBD3B1B3ACC32552F3294C97EDB81111BB2306AE1A9F0FA2279D71F40767AADADFA84449E8660762F71B68CBB44D7045231AD4F56990162729D251029332B7E5E423AABABFDE417F6C9EB6F1E2F574402828A779341E7484A10DDE6E51FB0F0053EC37574D188964B2C9692FEA707F5759AD8A8C72FC0D7119E6AA4177B755CBC3695E3058062F110BAFADF2EAE7BD90AF1BA390A5FB220D9BBD6970DB8418E964AA444E2F34DB78302A491960D02E2D7B025962471C5872D45DC55009836D4FDB5DBD905EB106D677B6D2E156B2E9739607B0BB1DA7D0B6DBF8099B430EC5401CCD0884E713B97819F95968EDE1DF006D514AAF2E7A3396CB27D25173A294E57765EFF49699C23366585C1150BE9BDA0987FB71D3CF2435A3894DD92BCAD3B2C7E4B7ADA72DFAE4637459B3BC1429BEDCE338F97A624E4567B6B5CA426DD979A9DDCE8FFFC9A8292C3CCD2C22939FB888B6A9D15C94F194A402E4A1BE8D5E8E29D338348E769363B50A3649874FCF3683D788801423FF59C2A3DC1255377D70B4E8295F091B7DF4144684F6AE64641B5D91D9F3ED3F5F4A18BABA1078F1043FA7F2477A77EC849991EC50E45FCFAA31E8403C2EA7EDE8F038872F17783858C6C0D6BBB18CD854D49D1D920BE5D4D3D99348092D8ECEBC06E7C7C4A4CA65B33DBA26BB94A52C07A06C9B4F795300888FD4FDCCCB7F77355E1E229AD2EAE0DBC5363D9ACEA88D974052AD6A233C9A0919093DB4B01AF61944FE43667FFBAF0BB39FADF40BB9B1C0B1C0D4E1A2A6684815D9146BDE1C789673B7B6B71874680ACCC0E86096AF9E0F38EC49ADAC7C64A02F9248FA16B5315FB3CC0FE0162CFE8B15598E2F8ECDBF3A315808BBFE93C6A1EA66133742CD6278D32351E0A04D2526704FD7FEDE05A35036F395E7EEFE8B56415E3E04AEAD4D9428AE6E7E07D5460B5EFAC5CE9865198B336E52E01BF3AD828E26EE6A7FBDD905D1A089265D7CE44617A846CE8FFFE81C8F79DF6D52111DE247AA769E03F235CB21DF5668BE74AF4606FDDCC2A7BF8C4CDE6B10E8CFE546B7595D5F0CAB09A0D9C08B235C7E5BBB5CFF4D839BAB7A1CC97E807D9735BF63A6F15B8812B7B4DC0A6ECB30D45BEE916EDAE3A76DD4E231399AA4FA4419502841D3086EF7D1EA70CA033BAFAD7F58740F5A126CD858591F5420739EAF58B8248706B18A5F944B4A082D7E7F2C1862F7D8EEC8B470288DBD9EB3712DA3A3635C365E887F4647B7DADFA675E88A27241DD7BCCDD20919524137537F01A29A2C94288B17BBA069DB51AC3B9CAECA1EF4E5FDAD629DCDEDD8A337C3F571FD15AEFC44EF77DF1CE55F3E073837F542C3DC92A1ABC18F772E2D450E4AB8D832AC2706AD8BA37BB27337F3B565B699D5C7EA784F3DF31B136A251BACBB30CA321FA74FAD03DF51599A7CA3785D4415BA91EA257464D0612411E388E077A796458BE8F10340859DBB9EA464854A4DDE14C5219C22F73F30F65CF97DF1E97F712DDABC29D0F4D64BC4497C3E772AA1706B19184E0E6EA685E6A7C0990DCC855261A6C3E65531F5E3CB874B56E3B4C23A53706439CAE957A185430A88154C248726660626496055F0DBF28F21F2434C8200C4E538FAC1CB332FD77F948D47A4D752DD6642030C2A7441071F1BC72F584A19224347CA2E0C240EAD4ABDD5785CA8147670ABFB6EFD124BFEE9F5EA8D6B2518105772ED1F4BFF1A8D7A9E4A45A734F6FB60F73F142D1EAA701B0D531428A3129A9F2E25B6459F008940077EAE437ED0DFABD9D41889B8FDF246E6D9DA05F15F161AD8D96861503B3FF0C7132AAE3C9C1D4684159F7B630CDD8380B2CC85E0B04BE73EDE70AF2875BDEEFC0AE1B8536797843B0FF2770FC482298CBCB3C405AAD15333353EB2C94E3FBDBB4F733536FDE995BB373E753FC0D78D5FCCF034D23009D3CC8FE105AC1252204FF69E2B5F6510527F4B0EAA31FC0BA093C713795C1D269354CE9EA7EBDE62380B10EDBD18E47CF098D98C2A0B9F79BBF8D81DF269EE1CE99E22B3CDEA3CE0BDEAB0CDF36F813339CFDBC84204E1560F4DFE67C0FEA6137CD43235FEE074D222BD9D8A5F3DE882B9BA9D8C2A08FA8A32CE2DF4255CDF579E29EF6EA171615113265817CBA35E2183368EA70BE76557B87E723946E1B73DC02E97247C2EAF809D8D7D1CD3C3C798B2D20AA0AA35284514ED327D378EF8F979062B728972D4B04B9E98903D8A38E5EE15F8106D61F9CA1C6D38EFBB57100C03D2FF5B57B09BE2A97CF8D1A352C727C213921297FAC857BB0D597722666B0412A55601D2CF17B010AA63F050EF40BE0C9BB9B574D2E145B80D27D34E606768D251337AD32370D64D8B6E8732524194F1EA3B29168342B96B887A3911F7D7A19403DF77867E04687E184FD74BD25E98688E80C20C67431FC956BFD2283FACCB1A0E3605476127D23D3E1B3C46334B6E70FA39D29FB81DD3804328CB4F0BDC218A33D462F712D3C57D49004D5B3BE0B4804C2FF113F45D92FC75FD6D18E3D7F9F62155D27B6235C3E6495C1969EB4D101C7A20906A372002354D117E6B15A081AAD4936B80581D765D1ACB9C8C381D1C95CF6D6BB33C9B93E794E46F94D66D6FA0119175D5EC65B53FD0CC07D7B6B6AD549D8D71C690D32460E7E39BA8E8D867721FEEE92C7BBFB9DD63672F98E74F1367B1F36973644251CBCEB55CC4527BD519B976B7E1C5AC11D0DC6DD9E9ADE263A6E8FEF8E59EA38CCF767661B7EA3EEEC6A72CB82674F72E95D9EF03D28DE3398F2BE7C58B54F1F18DAB11E719EB9609F8A6F6AFAA75588EBEFFE6272E63A77D8AA74D48F1C581170B5E523D0BF3529FF65929D2021B362E3A65A173D646D99BEC88165D73A25756D508ED6F6B61B43807DF52BF14063EE67D101E8CB5EEB97AE45E9C210EE4CE2B34AB956747A9E6F4DC8BED28A9EE809679B5E9EBECD57DF56B108E7F9B47D72347BB6D2E635B24EDBA7157E822812D5348BC28D66E81FA297FCEC7037CD10DC36178B5B5B6971E0499CCF5EDBCC698A3B62169460589C272A9FFD0A0021A17A39AC91C42A44BE9D3FEDA9C61FCCCF8322E2EB995EFF38A3DEC781FBAA343443BE1DCD3A63BDB5BEF8D6754E710DFDCBEE063B65B0C8D3AD601821F1020BD19ACB51206BD7A02A34E893A0BD620A608BF0250EB4A92202093216147D2B765F4E643DAC94B305DA17DF57A3A195EA24B7E5198DAC60883E3E8F338E51497CE0C387CACE9B8A54717535271A81D309CFE6E38ADD5F787696A0914769BF46CA1D3339AD713658C34FA3788EB1249C7ACC7F73388A1F7873EB2A2DAD44D31080FEC8C6F3C923408C00CBF39625AC6B3FF7F197CCC7C3CF461BD735BB93562636D5BD998AD64987E882A0B0339EA59C16E0E0A9CFCB0FC48D5B9C17382D6B13F2F44DED7FA20D3877AB5981DD71B83B1506E3842F37AB0F4A52D208F4C4A5C9F52B45E9C0291EBE19A645C89AFF0F2319E121EF29419915120C63FD9544D5B29916AA48F4DDE4EF5A0027E374378FCF3C635C218CCF0E62B9299170F178CEFA18D58B98BFEECB1A09C2CD8373586E1D356CDBE25B2A328F75A8759FA5AA4D1FE01F2107188C8AA23BC30BCDAF6C4938EC0052C7F61D17FC886C37B174C421457965CB8F9594DC92279C7BC6A7329227398FD0F7E32C1A64DD2A8A0EE7D60A7A2307D0EBF5A4C80E89D1CF1F88AC5B4F84FC157B9E44C3FA2CDB8560A097415FAEBED58C69D030DDF7DEB64C6D811AD3EC68ADB102AFD1115F52E6CF1FE250B695F74BEB2E04005C25A6709BB915E1C6CA0009457E7DCD7D35A973FFF822213FBB1BEEDEF047AAEB85E450FDD04C062CF2D4CF01BC63D8BE6C20EC9D88E67A68732D305F8B4E5918A0379E1FCE16EA44719A742E49F3DFFB423CC40D8AD8D8D4C64D15473164DF5CABE225993C7B115E03E27029975A5EF2F6B4D31CB559D43963B04B31806B933EEA2D9C5BF9DD910CABBCBB3704AA684EF0FE0A1ECF8809CABD99AE95E574AA9109AFF62E30F7105BFE4491AD07E5F99EB2446C651252B422CCB3B18CAB4AB0C8D5FE36D50C414E5C7484A085FFF1B96D1CC171C987C4336A8AB64CF677CC289F07D436CEF3DABCF06E6A9353B1AB780A4B1BA942EC915887071344FDF68E558345104B836317F7F91FE95FA12D09EADDCADF8826DE54F9448D3EA4A0446888DFD657882C3C86629F1F217C250B1AB72558BF9873C38F1A2242B5EC347BD93A190F1881E90DF7A8E4033ADD423E057FF7E26552F7F168FB7382D0D54EA2C4391AEF10E03961EFA1635DC14794CD2A1EE902A96D3DC71FE086667479C0F169A872EA56F405C3432E2F88EF87B1EF1030D7BF2A91012A13A6B3FB0351377BD096B398CDAAE9960FF61783D291CB01D40F7A29AC09E6DB01DB3159A1A53EDFFBBCB06F43AF6E9F78AEF5BAB6136A495C21CDB55C158D4E6C2878BD01F1F5D676FFC61F477053E0F87221F01E0F704CBE39DF497879E352AC249B57DE247ED462E0B00A9858E841E40311630E939A5B84D1A861492323893742503EDA8CE81D323892E8B407998FE39C3FEEFDAA1D9979BCE8B346BA6C6E15A429E81FD6BF49935FC25B028C74906A25888D2888C29D94CD63D9614BCC713F7EDB33CF99E601235A1912A7E4836432D31005A0167E1AF3926FE4ADDD808A88D8D1A8D4D59D3F0327EE0152C2BCF52498742039BD7096CF2D387BD3527858A081583C36BBC1995A4A40475C320113C1535A49573CC2E4F77C7BCAF309700AEA09966FEF33D8716586F1830856081E6F83AF5DE407EBFFBC34AD7A1DE15E9928E96E22ED48837534342110342506AFB345B58CDEA16ED78C4BB3EBC567B0F3A1A509F0C028738DDE7EA52F41352A4564E6706723EAF624FB7786A3BE2A9277DF0F1D53DB1AFCA03B7C2DE8F3F06485548169E4304B588CFF76EBEEFF1F70C405FC5534F9390C2A42BA60D16EAB35B333DA857C7ECDAD804A7B212FCD60A171BA8F24494AB5A90BD2C84497EAB3D5CB871626132DE3C99C7558A6C02B72BCD0CD953BECF0415C49E8291B59A5DBBF38FDE81E3CEF49522B65D17F756E76B54F9A4D5592CCEA5F0D3E6605B11ABFF999689A14BB21D1CF1C10005241CFF7898186DB72247E23C1028D07DFDB8596BE36365F1F705CC120890605FB97BC2F8EE03272622A5C39CCB07B2C05F25A35ED806769BD950C03BA263CD5F4C4740C8623B7C3AD0FF601C4DE0F2ABD2E3C5C2D319FC8C04D3BFAC754C57C44C3DB4B4CD816A5BD78F84CA3A4B0AE959BABAC9EA4DCBB48F9A45B6F8C2CE12B6A8CC0AB8DD89D561E62F3A8293DD939DD2F80F0F17AD3BD15525AE16C1FE1C4833B1E04553D059A6D3C096A9C082C71461B29454DDAEC08C55503DB311922517B9E06533590ACB63E797F98B8955F8A32E84027D71ACB2212BE5CA3DE0D2E55F45E1F041742E8B7F975C8E256683145DF3CCDA2FC193248CE5BB65880A9204E7E465DB9CE57FBF91077914027598504F7F8CBA8E8289DFB8C1D18452E8FF229E57B9E350199F25D2EBAF3ACE5843FCC9CC96DC76ACBD53F7DF91DF6E8E1C0415DDF0FE2A53DF7BBF4F91E7A255024B389993CCA6BC04ADD5C8D79998F6664B79218D1BDAB59096DB2DA7D0870FF25D8ED19375D6F350315D2F6733A0F94B8E163AEBF3D75598F0643B54F620581FB07248D47B93D7BEA9468DA88BAB3261A950D8E44D0E3741CEF30237B1DC04C1009D35B6D263199F6A8631511FEF1CFD13DD378C0CA202952E86B7B57EFF78F0819E1916C3546AF5523A256328FACCF8FDCF03327F75BACA40633681167339E26BF93E0E8806278C5C4F01CF6EA5C25DA4178118710B7563F8278A5EC9AB26052230C967F2B239DB4E81947ACAA49D0222F4372D6122EF485AD0F09F31AD6C3337A5198F300126E30846F848F5FCDFFDF2D114B6C9FD52D9186985C5BB99195A2924E8F97D0EC78236299E25B3F4AB23429A452AB6CEE8026CD4364E4A889F4B09BCA4B691F68FA97233BF15B818AB51CDE056DD44CD6EBBC9DFF87BF1F86B60BBF46FD7C66F78F1C4E1C118F71E2B3C3FBBF08C511725CEC7C06A086FEE85DF0714C5559A15B86A927FBE8BBB5BEAA0931B52F1C69636E42D1CF2F627704462F4C4CF0C2DD809A859B692CB6E4B5B79C4E0F4C0B4BB6FFEACD4090BE12DD51B766FB1F1520738332F31384B60464BD72D3D2E183863EBC83B8538951C194839AFFEBD2587F4A6A4B9A9BE83DFA82D2FB262228B3E9BB6EB245E747850D6A10D7815AB95D69FABE4E64BC4177B348C58E4689E17B12BA1168582AE116B1CFDCEAF71B7F9B8F1A89F81018DD23D93DF3CBDB69C1FD27887F42F8902F95C899B26C3B44FFED30972B0B4D2EB1EEEF1AAEB1F7B730A557FED6248ABE8EB8B49A268F349A80E83A6359BCE04B4FEB4A6E997BC302DEB7773CDB09D6221C68A419D09D9E9ECB3EBA3CD5E2E57A9A05D0744AD09745135F8A60A8D0FD3E5F67CA624D78B5383A99B5777C4F34A8BE03DB3B8BCA5E433DB130815E4901698DB04E206DC23C2F0C7A3F3CA96AC53860DF21783DC3E9A4AF680DE6343539E8B3D40FE38CF8354888AE7B51B85AB305391520AD7B8F2D7BB08B34D11AB1CBD3AC2CB37C550DD05BC10CDE69F5A79E951ADA5CDA328EFD13AD9965FC0B84217AF2E6C573FAA1490CB5322AC689576D8C12F94070EE721B290941807083DF7C8041AA5F9293AFBDAA61CA544837439EDBBFF7F458A7DCA4E422CE2D31902E88CCB2D24183C7013F0214CC4B0A03ED677E5C0CBB4328B8241F9ECC573AE8F7D9117B91E965B162ED891ACBF0A46C21556A03F36C709AD37B2036BD52E9D2F140B5EB246612FCC89A729A83B4EC904A24E8241BD01478FA3D4707D480BA520CD153CE6BC39EE280E8634D64FF47FA5C09C0D7FA1FDEEA5A6DF35EDC3C49BFB5F766F5D5B0C0F96BA788DED2148AB61A78A7F37D7CC36DEBE9668037A803435DBB2EE929BB09C942409DC2E23DEF865B9FBEE1883C6E976595241FE2EF49EDC4CB20E62F224EF6116EB12A5EDD2BBE4C0B55B457D268EC65933822BE9CE61CAA44635CC88413B4D29CA18841229BF9361921FBB3B65C759B39A6D18B625B4D7533EBE75736160AD239077FC72C1FF076C4BAF585BE2FF51EE81161C767814C3075BFE1E60CC0F999ACB22381FCF8B5BD35D32BA9FFDE9F4A7F6F0C837C430A748B2021BAC2D14AD950E3D506A4DE31CBC1735CCA2FC3803B26E5203EC5D8FE049413A433421728ED19AA8594F0E2860F38519A383A313762978F5F1BD9721C05F7195B79479EE01D3BD547AB7B1F299E02C0C0C5FA3334588BC3C703ACB9CAC4F919120CAA4561D2D8B0F613A4F7EE46231E28B4B39FF67AB4A4F570D97766999F6030114840F217CA040221661D53543F011AE1A287871236575EE72576F709B3768B0CC7581C3715D4A39A9AB4F9E54CD87B683C346411F7D0CC95C0752CC778D51EB1C4B7F44B04B903919FFEBC47F36E0C64FEBA202BF122E9FD6F2CF06513F06A63A5B8BB31FBE9F4CDF21EBC9E164C6489C6D5E0855907C3383774A31F4191C94632885DB943FF5F9756C9FD443D3398AB5276580E2DD73D905F6646A1E454F7A5DC0764E92C6817546DB9F31EBCDD19585D8C8E4F4CB718766FAD2A2F920437FD9316B959870515510436F1B617604454649078F8CB8192A072B95AFF3FA4BB51E7EC0BAAF36587BC9B11346598D59EA232FCA2979020B3B8DE38E638B7461B077953F0BD83594275197807BF8DED6136F6B076D3CC91998E93684D89FD88BF0884AE2C3FCF292DFE49842521CCE2F2E45316D69D7A2A02CC8D2F9318234673B324077E75F24D5D93C5E646F45D0DB76A34113A813D634FBB8351DA3BB3DA5F6F60EB09371CA4A7EDD81636032D93C916C5649A9E80EFD4E6F8A6CFA5EA241D8B6504016D6E6BB97701236F6682F13C1AE3946CCB636DFBD710C43207D9844E8E2A32FE738DA0EB28F79F87518D8EFF4346C589CEE869A4B0F4799B4A1EDA57D4DE835ED97ED2813AC301AEC95BA25F017A627A4154B5A10448F9118AE0406A211D0CC05D02FCC101CEA5DBA8E8C3F57C451F0A78337B1382DBA81228100E4AC17E6653342300EB724BE9C564EF0D93E51C0969874131193EB23C5B5D198E02E0E8AD1C022339FB728D6381B9FF86359A7BA459D5D79E70B16B72DAFE0A7222E7C4F306644F59B2012AAD6CD569A3F2E8F4B19C14B29A6D2ACBEFCD53B6E49D764E553F2DC673655EC24ECE3B0283428723B830F11AC341170CB414815BD03EDF19E28907A435DAA2B42118AFB607C8E5A94D670EE089AB413F6D9CB8A3ACA5F5CBF19B623472A617931E1AEB25E8CF5DFA2CDC1D7A8C4BF941674BC50AA05F419D4051BF8724B903FC6CC65760A85F58410D5BB7CFC06CA9D848DB6FC44A8FD3397607594863CEADE8938B50BC01384F90D18139349D37EE9A7B8BE3B0804691CC91CC6D35757FD8545D5A82EA04F343029893989C1375500C38EFBC232AE7A8D72F7CCFC7EFEAAB6154E4FB8ECD3546EF27D8EB615BE2DCD9AFA13616A3E071F3DA8E214AC40DD70E0EC344AE6902163ED8A99826279C26FA463757CBA15E155111513B4D3254E346F52BD512B7562D9DB153EAD4D1E4E1E3AE5E915EC4BE90BC93F33CAE82A94CFA2714C1D6C0C3880E13008C80AA3AD7EB634E38E023CF9E359BBF0C3CDB5B0C3A19C5CDDFD83BEE8A3F5C8B5E0C54432E5C6B2906871212ADA6640D0E8B27FCE5AF55E2B2CA26B2E2DD627DEAF973E7C21A6C8336F31FDCBFF34659B8686BB3037BFB69247D4BADB7962D022E7C8685317CE599934025287EE09BF1120F7D683CEE99731CE0AD249C22BF44C9BC32AD2A5CCD02080EDE07D03FEC53CF3A4EB3A07C696C63EF8CB8060D6984D24AFFA40C94ABE329C1AF84C3A98A1796C01B66376652E4274973043900E4643E82581B765A9789501529C6D6960EE48E76AF61999CD015D2EC2347477CEEF9DD3D3971812FB1EED4F5E2A19AE62F237B563834DA457E9C9228E1B278585827EDAA5A883FFE01744AEFDFA6C4EE14BEBE43DC49F9AF4301647ACC68FB7520EB8585EC9B16D18F27E80A354532119478EFDFDB9A36A0421C503A53F7563B91CDE222F0E028352396C9CECFBE853763C4AB83C24A7EAB3BC8429ECA3A3CAE9FD20D1688FB099312B46004291240140FC63D1450C9AA81D4F40C7E5F67EEC4A8067D9438E69BDF1921CCD288A4406684C444B923C547B739F5E9E1E35CB2CF9F8F01EFC560A9455A5C7B96C7FDAC50463413C738F8CC36C2F902D32FBED672E9D5C9BEE029B13EA3DBFDEFAD0F670961BCDABF10A1A441705E2274E0D15259F250F045316C4DB0C4FD64BDD901E3F2A788420C41DC8A67E3F5CB70D9B45493ACD54AB4E4DF5349198E6355651A09FE2DCD4B3FA0FA58B80323F9DC0CAA5B54F0FE8E8F512E58AD6BB27BE4AFAB11674EFF27F32FE3A9DF3F32D6C40098082116F70DBFE1702EAEF0F6D122974C74863C57F78D7751896FEEB1DC921F07BBD6FA4EA5CDBEF991961B39C2897507AAAB26F7219E4132F217A2BE717663C7C9AAF4B336C6559551C844B2186D9FA0786DB1CE3B66F67E7B616A6D7D3F16817602309CC6D45114530BA8C561C377D79837FAD0D74E816701527DF22C4484DD3DE0DE082BE6C91BBB379A757C8FE888D1533B1E0BEE624A3B7C6CD64416CCEF3DC6606BC8DDB59B510A477D2DDE9F201442550320CDECB7CFA3928EE6F322FDCA3211D72AB7EDD2F2211C019A4268F9393D0E095B1CC4B69F2C6BAE27722AB29CA8FBB1C7F7852D2D6AAC8F4903C623B28F88FF69F7473939AC41B8A4F75174F09FDABF965E443179BA9C81A959792A3CDFF70476A6C941BC533B9E82A4171607A2453FA14B76670684DD109241A5E3800F4D082826867FA8657E10A33217D64ACCA9417D20B9F34D3F0A8DBC95F9B77C4F295647C93EE383109B9BCCACB5A62CDFB75FB5FAB9F8F19E7AC3A05F09AB7F0735FBFBCDEA1387D4AED174954CC7FEABE42C3F08BC1346D484DCE54BBA00F362230165834B061107C4B3BA113A31D45D58FBE7F27B0A3BC08EF7041E2DCE94F7D2EBEE5E585849BEB09D87C7444DE4E7F22CD20F8E60DB3EC8730E17BFD8F448E9654491DDCD6069DEEDB115A23F95C3867F9281A40427C4FA6FD4A3CE0086B0C5878ADE4F0453B7B475FBD4FF1E3F8B493AD4D34E2E83E31436289C562730472DF2C211967964092216D235B53F34213590D0BF320F6A18432161D8C8F1FE6AAFB275510B1CC1D240E6EB523FFCE368C260659A8DB3F6467CB218ED07A36EE1FFA071FD434F2FA839EB333D4B3C0969A341C963C15BB5E7A40764F41E6E1C547D6F1202D7F6B6C8E797F6EF0ABF6B9E0EE38446E952E3FF03CBBA430B3B3FE218FC62FBB0AC1D45DF6F0E687685C2DDC6E6BF977871A031999D64C1542A473B6065F01026AE254C995F956F53640DF9F08F76A96AA0F680232111FD2CF2B5C785D3CCEA4E2EAF1244F4EEB94B145158E442F3465E3C7C51849D9E05DB127EFD7FD31803827CDD0DC2BDB1E7D7279ED25C5126F395F41641108E4802E4ED9CF86D27BBC174BAFC3C2D14298D82D4A20A272B9D169379B7C1642145038B4C8F3C3E8A5D1E87A3EAEFAA86DDC093B63585B62516E0A7E56F3B5D619FD831CEA087CEBC246685B219A40C059CCC096C7F6F40E21F8095B4104D627CCC40439AF637EAF60466043BDFEB70B3F2D976B74ECA16BCC5999DE09962E0E6BCA047DCC1B26CEAD96E57CDDCA38814207E9E597CEFE14A31AB284737945A3122EBA7D9D9BFE6B5150342DD2BFA3D74BB5CB08318712113ABCEC7B7902AF8D615413FDA580F507597FDBA8EFC63A1771BA365F940321C33074C0A61F08AFC4748AA24DC37974DAFD0FD712B1BC989004E664C56254EAC42E3CFB8372E57BA414C61584190B784A2A7D3233DAA7731884C747B7AEFBD0AE692C1FC20E0D7FD5D3B51D06D72C713002748721504D7221CD11A4AEB79365E527D52890113CC5DD50B0D5BB0B02ADD774347908BA3CC3DDB1A51C76F95D217E61354F73472CF04C927BA8622B5F39E10426C536AADF591FBF0A2D46F9F0DE16BE3C450BB9A2B953E9B325CE717CC38150EC8630792DBE02CD723D97CFCC81D8438022567F4A6F6A2F9F617268805C2F48691EE46590DE0A70E16C17FC985F456FC24A84A98EEF2C9B11EA98689A4E5E877CD004FB304CBD1D46967917E1C15BC9C02B8E41D0B4D25F8B0600D266E71E314AFEEB87C164804AC5B0A576EF9E3BD1B3A5C7CBBB222342EA8CA9967A7BFB1277F266F70244BC0E950AEC584DAFD2CFC6B29A8EFF8545E4D0DAAE1DCB861E1D726DE410863D23B2583E6242DBFE6298E73469CAE80FCC5D81ED60B6A6334E9C74972BD3CCC07C016E1C93803F8D97488C91007956F338EDB48E8A4A5F48BE074C46FF57502E9CB18F8117CBC63692F2854176FE303F3DF230D459E9F8A0E834DEED142E8355155BBDFC0B6247D7F61EC1A1A28ECCBBCCEEA0511C658E54CFD4A86B9A53BE771A75599AA26501FE4735347DE817FFD8DA572E018A0A33D42ACDAAABFDA6CED9DC0D8DA0FF090A0ED7D79014046C134DE294993CC3E80FBE093F7C9A1C52C8772EF299774585C259DC62FFED1E97303FFF67054AE2A351FDC951A752B17A7CE4DC1D619D3B8BFF44AC7E591230923F5D0EFC9D370F0EF1C7820BD240E18433E31708FD90D458A292ED98F2A89F6928A9274FBD35EABA46F050B77E86AAA3855E686403F64D252DC8F99D5FFDA372E072D92BEC4E57C4F52684499264534B7CFBDB03C027761E298517F9BD1E8B94C569428AF52825E576DB1855FEB1BCDC2B5EBCD57B5C5F634AF1735DA4A0FCEDBF98F29DFA5073A12B2D7F84B8BF4312AD7449819B760B2082047EC5AE0BE0D91A54DB98CAE3AA594A31032E7D4C54235A6507ED09F32416A5F35C36B04EF3519318CE9E01B6103FD01790BEAF6E762BE39E3752FE976B3FD79B879415591EE62362E1D3CBFB128549B06C7D81D29B081C7F675C86104DA5A59E68A7115B98CE63B2CA72D0725D33478309BE16B9121CE45ADE627F0EE0DE2176244728E3E2E3971E783A17AFFEFAE3666DE30AF09A757ED81E55F0D96C70160256499EFDCEF758E00DEEDE2DD057558890A9B7BE5185ADCBEB51D789B53ED58ED57DE2F6696FA9B25DB0CCC85C1F4E5D9AC4D4AEEFC6544EA4724CF4745F65546EFA62F8D9D725364091416C219FB268C7F8921EFEFD109E65CFD8D350EE5DC57469F82983571CF9BF26426F470048A2C68363B57485A3D0B8F01D0024EDC0406E6E991E1E954025C8FD8F6DCA6A6365FC17EBB3EFCE8616CC56B64EADB5CB65BE1B87403C8A2C6F7FCD576E048B544614788E2B9B4FE189E7A389C733D6B8F8BCABB9900027A6BB381029F9880F91CFFB8EFBAA1BADE87538917B6F766FB065AE084D2FBBC1AB6041A9A6A5750693EF0564B11A3249D2B1E50750DFD3CEAAC5B54361130E02B047E80703562B4449E91B643B65289A06B8C9C642F701278EEB02D55844F7BC0B4624668175F1C37D69E70D3EF2C89C68B4278A915A1AE9ACA4639B04FA73AB88EA612CE343AD86EE3088191E14FD259991B51A5454C24BCCA57FB6162D04213F25402502F34F3673DCCFDD6F4855B6563E43DCEF727A91D5097EE57321EB74483899CA1229CC2831AB3F501BDCAAF3615A1E729F382E34FE0026CC9070BFC060ABE7F12C386B104211F33BD130BA50346D36DC25934D7D8A21686D7243B11E6F2069410BF4B24169134D618219EAC52CCCDA3D5C82C560A07DBAB2EC2BA9B39673F9A8D0C58723DE2BC9D5E7E6B30C964838C42A4349CEEC142DF6FE91E8A49B123BB772090ED9EBE032F5DE3F3FF3A97DBD7D24C16563C55CDA33A5ED46B38856806F9968A9C856CDD515FA46DAC85657374D8B1C590DCFFDC865769ED8E67825AD68523E7EE09BDA0A6D50D9162CBF131559A9BDBB6249DE4BCE95380EF9361D94D015D4D38D6F6FBDCED3C06C0E70094D43BC1C65CC66CC3ABE70ED196BD13334983857127C11CF2267B339F08B76857C906ABD79A7FA0C75272D3B3523829D3FF47C3DB33D4CE66EBA3EF42E2E07C60CE7DD75FE286D31073D4395D45C11EA261E2FB03EABB701F943FDFC2478914B43B89702277B376B6F10E268B0C4014843551D621AB0C6A4DF0E472FB35C2B5E1D34C7025A8CB9D8284346D748E838636C71AEBE27A520B9F452D5193837C4AC173B16A417613F2A47D48293DC75312DF119977367A55896E809C55F798ED2CBDFEB640D37A5549AAC8B5C581A0FB82A4435B38D433B6F3C6670954419ABEBC97290652EE4A506ACEAB1C1A81077F3FF75E4899AFDDD29CC5BB5DB6DAD253BDBA00FA76D350385C21B5403BAADBF8E120BE18AAA6D428F6BDF2251A669740EAC88D90E69AAAF438A27C0E711FF6CAE470E1B7158473694E48EB713B9FB7E448AEA2773BEF752DFC175BC97AB53BB61D6208724D2DD6027FB775340D2E906CCBDB839CB6755A401C3B1AAFD0514B5933E68D236BD701A315AD28E893362A33A2C2718BD2E326BF763CC1E0000D738C619AB4A6E0BADFF3A3C6F792871D6F96982C15545FE9416021028B1D97ACA64AE25B47EFE298F318298142E10F3EA1D39F60627EECFA3A0665E2F445AAFEEBBA5BF3BCFFB747B32DC00764CF5A81B97F7E6718B5617F045A080B8D4230BC8BC2EF26CA31A2599C0CD04DCEA02D1F508ED1AC06E186F3EE415D5BE41DB1525F42D961B22AB71F38673C648E51DA61C79ED28B39D44627AC2EC52EE291003BB6CFA379287813315C16C14EC7D07C3651BBA51748DF432B327222B76CC9902971D1D8EF98D1B206FE36417B7BB96DAD548DD152E80F64C19416429E885A632ADDCD289CEEC3FD1CB057010EF5AAB74F082D240B69E8BBE6D99C4969F5D26128D7C7EA76A0595C9B52B2B8FCFB19F93D73B17DB30865788A283F33DCD9C27CF9F17CD9F922DA2665DED23F08F82851E19ECD5B6B9CACA5293ABF5E066EFD6A60BA90EB709AE975286F0A5E64FA55C149D0AF498D4F0968964C721F0B928EC0ADBB2EB00AC82DB2CEBEE322BD496AB17A17460C80B345F0FE55F72521F5C98E735F6FC8C0CEBF9A839232FA8332F42AE8B1BEFD65176A02B3F612B662F081FC43993581E89C67223F9FA5B662033D89758D14EE9033FF2524615008312599297653018D137075A7C81389DC7FD89333D8DCC4AB1DA74940E369B84D9B0B9D744B75D7E86AEF38ACCE4F5D827C0B2C9F6821CAA51BF94E462D443E79435747F1B37E4D58FDB8EFAAA0AC697E5757298B22F5F60D6B8C9AB1B8B6DDE9440A106DE79D4A85CA4E81BA03E25DF04F90BE1349429239E3CA6A5803C4222C79E0FDA0043E1AD93EBAB0453687F583581E1312A6672A340E647C48147DC98BA43D50EBD5E5BDE818975586F415251801B297E19F1919905F85A7AC959DC1C171DC3D52B82069C713885905C4F76EFDFB4D4F8FA6333AD5EC9A63441F66DAE62D1B3FBED6D79895B3C4F4CE3BC1179948504A100DF1614DEEAE102839944028B3D8C8DC2B9581A7718BAF72D16DD544A4856C8CDA6C89CA763B2BA2F37343C1603D33164CB7AFD8A2F9669D1A57909655E8A138B1CCA936AE2C9AC09A4CF991133B98655372D9C3C5FBEC3BCD6CC2C57F43F0813F20F26D31709FC7C97ECE35575EC7CD2870A6A461B8CE5AF53AFB5E70DF9FAA219804827F6158A12C0890163F1984BD748AE1A75A0BD1E5149A377E0D2471448CEB14C80AB3AB4BAE4E9D191A546CFDFC66126164CAC9DA5C937D2FFDE3C8BFC00ADCE8BBB6815720A7A9815077FC4D2A53C961ACC8DF9AEC2FE2A3F44E5269BCEA5853C7510E6D80943B0FEAA4E917F01F39F3AF704617EE7BDB0B2E3FDCB55AD145AB69069A178ABE18490B8C5885795E0221E55CC60576614E287C75B590DD97699099C959D45C8A9067A65BC58C2B62DDE6F28F701E19BB2CC64EDDAD5D078019F113818DF01A01C802E57BB47504A690B1E41FF6190D6A5541E5F24C1DFDFCAEC7AB581BE8A5FE22327CF23A351CA7C813F89AD32F8B3161F2625A1A95F8BDACA5F0D7F18B84AFF6AE069C7F13D482538DB9095A19219B437239FF0F4EDC4724998398D7534EB6A3579C55E5E9052B873FB9FF959B3685B53B44EA6711242B4271EE8CD9E138E4864F806C0623F622A3015A7D13342A6F44610EB70464EC4409806C8B3C990A1554AA3EEDC914447D32C6EE3307A66E685C3F431EE79A9EFDEA1752F5574F9C83B28EEDE1804AA84EDCFFD85A95179DAF5137CF852612A047D83DFC3A41124BE3A6175856A4977959A8C8B17DA4D7ABCFC6B41D312A790644592A7E4FE3B8DABCAFF181E4E7F1E6D966589A89F1F88AD7E159575AC7DE25F91D912B90B9B899C53035AF020AC18B91AE9EF3F0B9347B83B2D7D00D3EA495A77934FB7008C15C189625592B07F2F76CCAACE8D9C005ADE6C99130DB1088BA5E7B58E085030CAC186191E03C078D54A719F948CBA7DC9B399489CC90A75038692A58E4A958C593B2C27599B4A4106423EF7AEE1238F46CA1180859602CD658A9A451BFCB39E22B1AC6FB0FD55D7A7357E38B56679FDB9C0670E67A45816713B7E4BD1E2A0C217FE5FE8A8E21972AB9BEDFBBE5A57DA2D886AD2D5B26F305B0AE5066A1F6196D6717EEB57756532411DC1327A851C8748CB76B8DF3A539FCC18683CF0E249E29529E1FE24AE5D3EC46C13473A2F78039C01ACDD126D0449928D3C77F295C39302866FE91FB5B426FEE64FC8589C0B41A0E91D5AE2B8C530D65BFAFDF51AF2546F115B3D26CE075EEDE849C3C135FBC7FE77068758CA4B082B6852999CCC7F3CFCC779D957300941EA96799EBDA4F1B0369812A10FEC753891D1E94AE9FE9E682F3D301F266B7D252CA02831D0E95DDF5DE153D4A26652DE0BC2B65D3AA9F6947A2A240BA0F046ABA449CF87639737655065EA407999D3815C9877DFF5093BE01C7A9AD50279871A1C6A6C80D6EA0C5ADDC898F578FB35824FC8BB44ED8FB7E16E098F1AAA7AFCA358472C902FB536388196361A3EF0D190DAF3184D7B40EF9C69EB671B0B7F5BC5C605584A7D26C5F5F59B2AAE9B335B6A08FF392D0A7F187C77EB83319A96856BE2914002561702E902FFAB76C6AAB8A7FC0A76F01DF841E891769E8E013EF4A0BB4F6C5591C0F848089D7881C733D03B6401D2757E9D462B744230279DA4B772936288305F4A9BCCD5234233800601D68559A3CDC7F2E7E233D3F2829AE2A23F53A5EE331D4AD6C676359CBF377907407363111C2A722A998F4C463F21D8C6810C26A6539928205D87F7AD0B3C75FAD712C3A71589DF31D89AC5566A57BB1CBBDBD602284D08247DAF1E15A7378CBCA471563CE074C60ADE621509B2A6B8FBA000A2B284E1D468E1DFAB4871FD8DAF4AB348A2EE831BF8148F1AA5F1E8AC97CBA0CB851E5242F422AC98F6654D1B32B59099F088991BD0B8FD943D0E48D63A230C0AF52309143D3DF8134F6336E49071E1468E84228B8F9E01DCEBDEA957C9EF3FFE85FCC3AD19251D851D4E51318
1
+ 1A399589A7FA0F24D60BD94F13E5AE8115690C5A589A312CDB7990FA047720BC82797471F64DD1F668BAAEA97B424AFC036B654B211B783DBD8EBEF0187D49B74FE42AD36551C46026A4763B7D2C5DA9434AE8AB15CDFD43FC924E60FE0F53BA18468531EF46D9137414A3BA203652DA5138ED819550C8013131BCA455D9DD52218372692E708E2A9A9A6273F7495DCE1CDDFAB4A01F7986FEC02B993AC0130210257B818DE3A4302A387F4224C0941C0CEBC1609C68A74DD2C614106F1ED6E6010FD1FA3F703D60016FC52FFA1D5928C480D4B5AE83FB824319ACCA8AABCCA056CCFC7626E140FDD7D93C355816C9022345D4B500F2DACEDD22FD2B73F92E038FE12487D9B3290AAED27160B8005D3CCEB482E7797823990C7FAA3C55D54DC373F6AF71C5A50C4EBD7BCE0D45AE006C24733131F4E3E56FBCF6AE2337BD64D5D5996EEB65FE7F7247E0119C19D2B0FCB201F4D6E70CE8552B76B4B7C13CDCC3219F5E62C61C3551A8E683888862D247C18EFA2B958654C68EEB6B70E0895FBB7590725BDF2DFB6B31F41873D38C08564BE80FE33A86839E1D1F8FCBD9224DDE5411DDF04D48FDE3481287EC7D7456DC75C2EFD5E7F2FFF2150AC310C462032C4FEECE38E827982419B02F20D0941FC909E859E8F2D34ECB2BD0F28857A14490700542D4DF5F90857C4F7F674256928068834170BF4E7EB985251383159125FCF0057C9A80AF7E4181A39CB0481313DC23F86B886D63FBD1D71FCFE962F8041A660E7D46B58FAF136F70B190060CB1ECA335CC044F4825E90DA3A79BE88E31480D0BCFFA4B921724C693049A8BCE898F6B77B1B3085DE9AA3CA43BA63CC580A2DE0D7FD4D0BFBE903683CDBAF92D0D40B4432ECECE5CE35E7F7A2CA9242AB15CEBC1D3A75AE20E1E35437FC615B39EE45AC09AC9A16EB5CFBB7787D4A8B9C0D56A2B5806562774F9494750E07D4BA0ECE4EB2AA7CA8D0356C79E01E33950711814BDA1F8C78BE4AFD32628E618973C6D04818FA930C08628266F27DD95CD6F91D16375E2DB08A324B080185062F74E8738E871840AE8FE1CF0207D3D79FFE9C006B32723359FC25DE9D5431617D930BFA9F12F03F854740349F20CD814C0F9956F34AD1D2019EF4241A17C2054F4EB71364733E31D99C6A961EAC07B8418A56B327960CB99E8410BE95BE732B5463A0C00EF98BE228200B6AD8A9A16320C6141E74D0C35D3B74EAFFDCC9DB9DB01CF2AD488788DEAACE6670BC936E051FCDA8CD523EB7D8F745AC0024BAFB55A0C69919766430048A772A3FF0BA727CD1C5AA4511DA2FAF726D9BBB15BED0A6B26A8D5B85954DD49AFCE1A4BEBE5DAA9F1BA747AD61CF414ADA792AA03770EC0FFEB7E6F3036BAF4E7D15BB3EDFFA7E5D2A2641785290259EC2553F0A85EB332E34C303B0EDBDC651308940100C09BA60B3D99AB01898E168CCB9C60A479CB52A375D15A25C77A42CFCD39EB5E2884569951B2B7D46FF859CA601FBFCFF53D139545D638A28888C8360D3F3A96C3485925889DBAF83B939BE35A81A26A4C33F965C0354A967546DB2EF8163CDBEE987BABD0782F86C1DCD8CE44A0A2768DDB7175E8532EE075ABE920EA6D534F17196402A06D4A607C7DB4E95550EBF03E1707D645F74CE2C59C188F85E83D9102A0AF19F1A2AA0E1C9B9638F73C2AEC2F246CFE4C7FCC23D216973B97542D23DE8164747E0DA14FF0997AB360031A7F28E1B4D1DC65650BD58E49C0510366CF48C84F857360CD3A1329679AC0E63D349D500722CEFAE150CF5A77A969CA99124C9722CD93BA38C372A7756847E02E0AF90511F2643BE81B15196365ABC6BB3BB7CEEC54992449937F4968F92BCDE7B1763BA60F11F4ADD97597F8A6A57A77163AC4A0DDE0FF2067165AD937BFDDB72805AC7F8EDCBDB520FEA695D1E9E2EF341B0E2D96B291788D0C14EFC743ED76B06D7F422AA8F754B06D1D4EEA7F237EF7717B76FD8D10362A1425684D829B422AB72E45D701E65AEF6C1367A18DF6408B451CD4EA46FD7D2C44493C4C90532E2A47E8D3D5243BC5F28C7CE945765E27B51D5269DED2AA7A4F26A67643D6A37AED9F9473230AB17DAB1D347AF30D2C08854DB002FEBDA419D5F6FD876E22C04EBD3B1B3ACC32552F3294C97EDB81111BB2306AE1A9F0FA2279D71F40767AADADFA84449E8660762F71B68CBB44D7045231AD4F56990162729D251029332B7E5E423AABABFDE417F6C9EB6F1E2F574402828A779341E7484A10DDE6E51FB0F0053EC37574D188964B2C9692FEA707F5759AD8A8C72FC0D7119E6AA4177B755CBC3695E3058062F110BAFADF2EAE7BD90AF1BA390A5FB220D9BBD6970DB8418E964AA444E2F34DB78302A491960D02E2D7B025962471C5872D45DC55009836D4FDB5DBD905EB106D677B6D2E156B2E9739607B0BB1DA7D0B6DBF8099B430EC5401CCD0884E713B97819F95968EDE1DF006D514AAF2E7A3396CB27D25173A294E57765EFF49699C23366585C1150BE9BDA0987FB71D3CF2435A3894DD92BCAD3B2C7E4B7ADA72DFAE4637459B3BC1429BEDCE338F97A624E4567B6B5CA426DD979A9DDCE8FFFC9A8292C3CCD2C22939FB888B6A9D15C94F194A402E4A1BE8D5E8E29D338348E769363B50A3649874FCF3683D788801423FF59C2A3DC1255377D70B4E8295F091B7DF4144684F6AE64641B5D91D9F3ED3F5F4A18BABA1078F1043FA7F2477A77EC849991EC50E45FCFAA31E8403C2EA7EDE8F038872F17783858C6C0D6BBB18CD854D49D1D920BE5D4D3D99348092D8ECEBC06E7C7C4A4CA65B33DBA26BB94A52C07A06C9B4F795300888FD4FDCCCB7F77355E1E229AD2EAE0DBC5363D9ACEA88D974052AD6A233C9A0919093DB4B01AF61944FE43667FFBAF0BB39FADF40BB9B1C0B1C0D4E1A2A6684815D9146BDE1C789673B7B6B71874680ACCC0E86096AF9E0F38EC49ADAC7C64A02F9248FA16B5315FB3CC0FE0162CFE8B15598E2F8ECDBF3A315808BBFE93C6A1EA66133742CD6278D32351E0A04D2526704FD7FEDE05A35036F395E7EEFE8B56415E3E04AEAD4D9428AE6E7E07D5460B5EFAC5CE9865198B336E52E01BF3AD828E26EE6A7FBDD905D1A089265D7CE44617A846CE8FFFE81C8F79DF6D52111DE247AA769E03F235CB21DF5668BE74AF4606FDDCC2A7BF8C4CDE6B10E8CFE546B7595D5F0CAB09A0D9C08B235C7E5BBB5CFF4D839BAB7A1CC97E807D9735BF63A6F15B8812B7B4DC0A6ECB30D45BEE916EDAE3A76DD4E231399AA4FA4419502841D3086EF7D1EA70CA033BAFAD7F58740F5A126CD858591F5420739EAF58B8248706B18A5F944B4A082D7E7F2C1862F7D8EEC8B470288DBD9EB3712DA3A3635C365E887F4647B7DADFA675E88A27241DD7BCCDD20919524137537F01A29A2C94288B17BBA069DB51AC3B9CAECA1EF4E5FDAD629DCDEDD8A337C3F571FD15AEFC44EF77DF1CE55F3E073AA5B6DA604B47437560CE84B3F6F4786096999D83FADDA40F2F89DE0A9E9C47890E6AD5886442ACFB794A358CC1D48C4329036C64CFE920E0E592CB375353B6567463A1D5DDAA14FCBBB555BB8DFBD5B032DE38026FB012344840C4FD430EB4FB2DB27DA4A180452AEAC5FFF699522F27C051249B0952449AB1285FA3B74D659519156DFC58B4E365436459002A3F9731E4685A181B5C34133943316ED4B74E45C41879A58B649B5338D4BD33EB4F3DD67660B3F3FAEC98C047E8B4404B4F2888BAD85F208EB8B682260D607F10137AC7247196221E5CAFC73C631801D02C2CBC882C2A9E0E95F5D636BADC6D9234E6063CDD77D5379E7DAB72DFF75D1058B3F821773CAAF0942E1FFE284496BF5C2F13EB2CFB0E04F2DF602D43D05DA36C9EBE4BCB12226830251EFEE6EB38E11616946C225760CDB0A33B935BC96A5573C62F3DAFB217F8FE027E2D96C7036F7B144CCFEEC1CEFA4AF8020DC2AD56ABF18FD461CE2F76DA92D721B7F4FAE703AB87551D82EE4CAFC7A27B32249F67E81FBE1DA1A57C6F0815BAB5611DE1F6903C5B2B11A61991C2EE176C422139CC461F1984FED0FB58A42CCBAC663EDF57577FD985786EFBE1742BE06B33AE518265D8A8A89100A7CDC3642D92ADEC5CE922C8FD636CC6FBC1BF9466D89C8770F49AE6E98F774C96FB308332E38CC16EF7A9BF3235922CD8B72C4ED6FE26B8C279127728E023B31A6369182D538B1C7373D9470C8EF22D3AF129821A2857A1781DFFFAF4C528EA9AAD2739A10D0F742B5D032BE04BE09CB8E28767DE98FA756ABB76A5C7EE8E8ADD8B85E87BE4BFCDFBF4EC3944502FEB1CB91006BC9033DBB395D7F7EC0A68743207063B68567B2A38709C4F9ECC1D2FFFE2137FD7C7E4FE98DF5812D552C84B92F81364A091FACD88199A7B418B81D10B27122B69F6CB22471407AB9762D8269019E5648B2E1D9ED9950733BB11ABB6A0E513FBB65AC6DABD8F0F27F766982198225DC915394B13F773B7530039528C745BD402BEAA14012AEB48C84F493B3F3FBB368203BD1BCFB8A1FC2F890196AE4B69CDC26F6092F1A0F5C08C1E2F4459387EB60602B281BE70F2DFDEC4433D0ED7474601E1562DD9211E593802E869B12F919F0AA4982FB337F0AAEB55CB598687362C8E607286FB19347E10F38C4477A61EB9194D1E462959CAA53808064EB5052533F22B3B19FFEBB1C47D3A9A16AFD219C11274C50425E3FA1A998679CCCF6568EAF884EB42DB3AB44CD28C4C279D6D62F35F50E6B6D28530A9DE12B78650ED72A327DF3A5E85E2661A9FEC7D746AB31E361AD94F901ABC9CAEA2E8056C1A46F4F7C51099B480664610E8760C9C7ECF645E9EA6A48A11601F5A4FC9C6B54CEE1DD32CF32EFE4B060B89D1FEC4D8760ED57B309053608381FCDD0B8FB275C968923D3E8DBAA6A52A0C3362A6AE78898058550C0198447AE4D34FDB4D30BAC6703FB0FFF32C1C66F481C5A2AB395ACE4C332D26C1FBB99B76A6EB6983497EAD27EAE77EE574ED3C0E1F5CC7506C2EAA5C62B2AD0B05D454E8E3321D05251DE63A9B0986E704DA1D9E94AEBCAA1AEBCAF25E9706C7981416ABBB7F7C2CE0FB1D1D1A3783F8371DB9D73847ABEC1D83BCB41C791324396EB69DEA97CC370ACCB498911B43DF75D57CD3A702BD78FCE4DEE7C531F3CCBC5427BF46E38F5EF4AA58415B15551264CC5F34E2AD47349631DE5DCE2729E9A274A725A4364BAC12E31B053286523556B4BF1D48EC352B56E2CE422750DB87B70FCDC9FD51B57B4CDE114C66193B5F1CBCC8B6B5775DBCF0A50247B5344670536BA27F5F1A5BE64551D6E60492AB732612953A9A6213C429EEEBB4F1C2FB03B6B7594B69CA044B57458FDCB11C7153134D0399473DC9E62B8637CF4A04030AE267F50ADAD5967D284F9196F1A2A0229C8C14FDC4ED46A7D940EAF9544B9711933BDBB196F67B768C7554AA936C859AB8CE03D89244875AA022F6F44EDF9B57C5862D7731C6BD6331F0A1A330019DA84DA95BA316B7E8A8493764F14CCEDFB10255D9A0B2CC83948C9311A9FFEBCE7CFD49473FBD27144B7A7C7FA978298E82A0A0087372B72D2A1FA981D6E521AB066F6F073448862A3914FBD10666C3EE61F2CB53138AD698E8BD0CF7029B8FA72D05D5C3E125F44E150C87C8334A44E33B5C891CC512334EDD6B38627A2A08AB50095FC4558E279A55989B3E3EBF51402A677338AE36C64475BAC7441B18EF796F9DACA813E044991FAD488ECAFCACE0EA8167DA6AEF7B853FFCD0188C8BA875B90196009C7BC46FDC0CE93B3F2D03CE7F887564411BBBE2D8D8AC5695BCBBA7A4B9B5379D48BC1DE9BE712C8FD164A72016CBF68A21B0D7230D8ED2F584022D61A38D07EC9FDE3F66A94FD9DCF4A6F70056C34FC0C7368C503E04E7A904ACB64940CBF84D8D7F606E16BCAB4EC9BE3E905BC5267CE5AC28AC53CBE64DA7D1C5067891D8262173F36E8DAA58F6FDA7B85D8E6CD574DA2AF306E7AC5D046CA7655FFDB8DDA65531108BE2FB845BD1FBC1C57446946F7DE9B1572F1DAED647CA0CCCF347FD6534C35E340EF390B68ADD87C1B395255AE048539CB0DC9BDA2FD3F8906E5AE3AC2DEEF8CDDD3326210E3702109D348608DAD2D420268501C38D23BE7F1B0E658E6F8A0A446796B110B89AF51693A6960FCC045DD96B0E9AC191723DA989FC7C98FCA86DDBD7ABB589F7961247FE03F418256AE7528E15D243D62E5147519EB4B103B17096AE910CD23BD900602974A974FAFCAE26FCFF0F7034A43A28BA88873B1CC25C10102E4A58AFEA5AC5D950E45D141D9460BD4BA062538608F6DA0E011D95AA6048DBE7802220C015F9BDBE73A1598E71366EBFD11E6970C13951E89FA9E6FA43D32A145DA47FAA753FC460B8A9E934BB0DF049BAEB9EE300612502481F415DA9D9DEF11E585DB33DF1ECAEAEB3214F244ACF566223AC4D10EF93391F09D64F9397023C6E404AF503F3AE06022902DA431D3576DC9F4AB8E7A8C70A87C225939A70E04C77AC17FF62DCBFF7F7284C4B7A5417A7179DD17C58DE2DDB2F852FF61296748BBB9673A657EF58F64B645B5B6B882CAE5880E3F1359D33CE6B711A408853150CC62E461D13DF9A9344B5D4269087CF5856F7D585CA2DCB98F0602BB21B256136350702A0C25687E1F67797642BEDD02EDC025613685D80BD8FCF36DA1E5B81706DE6736C603FB2B5A7BB7554785B9C2BBFFC2AAD0D736B11AE1F18E3A6D70257B4CBEB1A7CE1B70C0DF03BD00853F5CA7A2DB95E7CFEF08722B0D534DB9D118C5829666F25D164CBCC40394379729552A27F5E5AE05B39EC88365F96AE0411C7669A85A9A28220150B47C56F9DB522FD2B35C4A2CAA4C2D3D526764DDD6716E79D04D4FC55A08F52AE06008AAA08828E2197DCAD443AB7FF2E7859373B405E5EEEEA91F9D46E2CBF338F8AA0E3ACA5C9D955BDF06ECA0D1DA58B45046339EAD84A4BFF7AE6605EE8CB3B70C49B5E682E47DFD43593A64B1910A8B0834A3613FC48C04CB974C53BED17C97C74556EA244662153CAA718895C8AD883A79A3184B73EB3B59120D4DA445C52ACD6D54E79243B9C0902C5491FB81AF59A1878352E9ABE2514981E3A4352CA0416A78A631F088BBC8AD61A8A64F6A645E0F01B8EC2F80CEE049A92DED81DD2E3E11302BC5F17967B246FAF7E8CBE642A02180D14581933AAA17D6D23836204D955E78482D85B9F4FE4F33BACCBEA4C55A04581B46C59CC10D7A085124AD93211710F5DF6862DDFABE62E30E76F7F973C66B3141714ADF7E8CCB101A89999FBED40A1497DC844220F7746CC7D526983DC0685C917679E290BAD68C09C395B6A82E6802965BBC850D8AC2C5F131BA6E09B9BEA38A141929128966D211D1885766DB31C85339581526DE3AD2E3157CC4CB56F218D7EABAD2AED1F7239C6B72068816085E369B5C94CDDCA646563241F0C2614DD455C027A2D936D7DC4F3E11AF102B5117C1B3A17B8C733142F666F6C797537C24E9C9A3F8D53B2F5F5563E12E36399E34564DAC982051215C5E979880C17610944C9A8C37C208B1C1EED2B104145F2C5FBE58363F0283448B5406DE0EA700CB367C8C67128A4CAFF265A91B1C980F1A31332FD98D2BF1E1D923FCC08BD3D11974D2589008F8F8EB0733AB4D40795188AFF9EEA8F745EDB2D7A556BFD7A650BB21F206DF0F55287A3AFE2149DBA24B27FD580D495736D9D617EA740288CD89A0CCD3189B922ED3ACFAF8B0C16BBC3D20330E3BDC837601F056618944A0FD6BE9B4E8587C8A1AA3192F6A26E2020740B38D6BFBF15EBBE8974DF3BDFB83FB250B117F3ED2ED9B67E8A4D7B9C477B56978CDAF63D40E5B4DA824170DC0D0FD6BCAF5F9FCB69FE5C08299223BF33CEA1143173E16CB26557FC36E0D6F1A98FFBD10230C1A338CC15AFD2F4CB8C878E3F3C8AB8C3E8C23022E3333FAA92958AA4760C39C8F74E3D0D41B95D6594B29899E519643226E5B27473D10CE36EB060D25B086F275FB60DE4B369BE9368E46E6D34A6FBA588D9F7458A8F94802A4ACF9A7C6A79F9B5745CD7C2D48FA64955F933AEB4D2CF9110F3EDDD8B26A28D7F8AE6B250077FF6C9ED9ED8CE00D0A26A6A809597B02D717821024FF0C126A4C6CDC4E4E94BAC2594A42A988E8FE19249816138CD72093699F7C3F8136E70B9B7EF0C6A16D2610F1189347085373BCD3AA20445751875FD236195FF0DCAB29510902EFD1114656A41438AB3A326EF8F9E6229A18FDC2F561D1566F68A91F7A4EB6BF84D0ECBCCDD75F175CE3DDF34AABBD665581E396C92FB62D11DF4FBDAE656262E593D73EF56D56069B39359428BD32D6CEA8113879DB563751BCDF877E914B56F79EF484257E2E60900AB52C5A0A5BD9651E4A72E3568ADF7686880CF4269A11B97FC70A2EEED641D9D06E27C5EB71E73E903D50408089395B5A317C0DEF558D9AF4B64357ABDD207078034BA5867317E9ADA367FEEC965B68E63A7AC17E84B87AB70982F7298E8AB3ED65AF3FBEECEDDF2B2CD477906D26ADC8E26AF03C946C39E1D5D5CF600E4F56BEA36248190D36CA3341258772127CDF6E00F6E368E4D50B3C722CDB7E666B323E09151921204C120600CA13CB0C1902303CB00A8FC55089FED9AD7566A811EECDB02CADEB7BC22C04133DDAE54FDA085B31BA390828C68985F01EF82DB2BD080DD5D72F3CECAF1840DD4D4FB9F853189136C42F9024718AA46F1FFDDB018E47B8F81F6BE2DACCE4D0464DF0F0722A0ACE253BD675810321B385C35D2E2D1F93284A27308A0327D7BE05C640BFD95011B7CEBDC3AB1105DFC467731980D5B0EDFE68BA1BA1E919E6CF7C91275970454675B7BB53679E79AC965AC5F2A9CC2184796C009DB15DCD774920152753013DD64E00EC808F3D658355F6899D00821EEC3EA8C2F2A255B3648FF8FD01E1662F3657885523E00D540F06453D25E2B021B3EA5ED5EBE179CAC0E27464AB821347D84FD541B38E515944F0092875E8F9CDF293CB5C69BCB70C298042544753CF162678ACD92F463A08D6A6845446B2AE02C4DA06E5960B195DCE2B82618BB761F03CEE61DDD9BF48BB85ACF169404F55E049B4D5B6BC69C377E6EA5960E2B67FCBAD283053D2A8D86FF5E27D1121E2AF09F42A42AA309BA601EB6D9A8493F143EF37A75F6A0BCEC852A6FE5343883230C691B200E7DAD2A03B5F0EC695E8359DE039C1D0F88526CD76417A00FB35E8029D20C5ADC088B30942F36242BF3132261885DC0F583DB3D625A98BD903BBCC4E214395ADC9054F676756CABC9AA7A9E1D420C2760A4523231A603D3AEA92BBD8D216945F9FFD7E1B04B67B004C51002F95BED2877948102567C80E53DEE7072B65A1E8FD4673A7F2274E4AABC7BD66DBFE026DF5E1B85AC4CD25F6FB8DC8291C7A0AB2B3F6EDF76F7E39CB4B86C1179C02B6CFA164073DAC901F9EEAA364C5143DEE740B087BB11C867E6B022F46D796896A344065B7D7D62BB83462B44D0324FF3710118CBE1644F53C6795A574D3A62C148472538AA88C6FAF606E43AD6949B53AC62FB9EF135ABB93C03E1CA3D5C9738FC926B405078E49153922BE24A1C1E27D6723827B023FFE6254F1748CBCB2B697554066869B4C6B404EFD013EBA71537A08D15FDFE046BAD99D3AC85F5EAFFB3A99E8CA507310E08AF41EF8B9197EC6F905568E765C5590FF24D51E171AEF56A25B59F507879B40456E290B9F0F63D353AF125C0D74B582C1E3EA2D7429FD775FD3A9097F8C754F562F5B0C4E74318A2D3D67F4B041C54641029AD8705D64CF4804B8ABA2876DFB7DFFA7ECFFA17A14190ED5940AFEEE6E852F8EAA750D6C2118907DB9EEF5A5C0108D1F55D34D8C7480F397CF7FD62648C3BC16D4C10816F00524DA86B5773A1B365C8FBF1D0E38342AA09A2DD06426D7280CE69BC23436E4C286C860154CD58200A010B764C6BE9A6D414ECCBCD0BE0B628CE6C2DA56FD8E58B7CE074C25D262003B6AD72E4D92334B573AF37FDCE9B7B2456FB710909DE8C2CB4F5765493B1138B90C6BA06ABC40DAB2BF61A41F36F049D1BBB9025A8BB19AE72B6D434351496CCE5DDD4704E5FC879074AC0B972ABE4B86623A427B87D7E07BBB1D71B3001E1CED33BB0B34B7C3CBC78926D00181B2105B4E5A2C2C3147492448A748FB67D9F63D59F951D2D6764E9AB6E975D207A45EC651678825CFB1966781FC83ADBB40945F8A6C1AFE0BAF2743C7B6B4ACA465B1F002A8FA6FDD9350ED1C1076357DBB05D7CAD5543F3BEF124CF7D7CD26108B7026C8F722ADA00AEFD79A046A1C55F7F01CA36EF6F4378CED6E6B24315D03AF17BDB63818EB2DC6B478FC0BA076D4A5A78F42FCDF480B2FE92FE526CC77C17F1600C830C308EFC7EA88ADCF30F2517B207FB4454305515AFEB93C32524489E77153422EE686E8F15E087523A81D3AD369A760F82F03A1A7E032E55F09E67C9577FC2B28019E53BAD7204F15ECEB0BF9430949293B5AD28C820EB6C0EDD8E605EDE85D7CD2CC0EC9AD8440C655E512F2ACED5928D1E55933D6599361AA9DFC9AD656A553D20BE09F6B10924D72A5E2FDED342A360F88216A64906BCC790656BC1C00D05AA0E1CBD0877D41FCBBA3974E2B98BC23E0797F27622EBCE4E150F25AF9A9853756F7B751D862D0507DD35239E4565FD41201AB836FE69E84E8B26E96308129EAE1307737FE6DE0A600DDF53D8E60967CC2DA0CF1A3EFEAB97B5867478B97A4ADA9F110356AA15444C452C17568F665C8FBF2B5634ED164FD7F9750F01FA70B20DB9F96572670291EF83CACC1212DBDE7B79B81A58F667C234A4EBBB6457A38DFECB8C7D3DD1C96C811044AC5F1CC8F04B0AB88EEDEB1CF21C007A6E5AB1A909FA21187115E21289A648806266A9EAA9A6EE9EF885884D2775E936EF93EB550635C0FF0F53B642FE6A020EB26FE066E940902567F27F1F5A21F8623475E0E95C7C39F55B4E0A7026E0BFA3CC7CF3121F7D626EABAF480CDE513B986FEAE9B812BBF70696625A60B953E16BF682443D8D484C33F1273D4B1949A64946DAD8F8A871F9750400923E1FD915D1D08D0BF87809D959FAFD51841F86EC23D2C9149A38C89F98EFF088D80EB06811807AA23EDBC44171322C871AEEE77DFB7A316BFA289E96B1AD5E28335C28FCA1AEEE9B5945309A38C7FF5955F2C6D2332A64FA47ED456F6E9476CBEE4EF08AFFD8F055EFCBD7B4CF5B016F9DB9082A9FADC915FCCFBE5BFD1363F378C05422DA16089FFE0285D6EED1F6BD4CC043F09EA3F5FA1DF2A308EE88C62ADBD23C019748F13A87814779BFFC2C3A99F24847BC783C01F6091A6EC6676B354834961ACAF740A101A7A3EC1BD513A4FF14BEEE017574342752F874FEB9C9B42905DA28F32121C447D1FEBD60567C835DE002690468FE425B578D81AB03C2913C7E196C6966B7CA3A6C2C258C017C4BB6B628B3CA5C2E13012C718F56576C239FBB2BFF3E1A37AD3730D61C4512BC4D4AE48B2F336B7E9D555BCE275C2D8F2D83896AFD6B909C14768744BD2EBFA2E295F6F37EFD16A73354453D707DC6D1D9986CDADAC368A18DFEA5724EC188EE8F32F4AC3A39760F2B93B60B1655F5550CD97F4A9F9514AC27A0BFBBC8960FBE6F25C039E62A50A7CED2D975D252F1E63DA33E7148DF3162D1EA9E26F70C343094C694ACB0D83B2B6FC7DBE9E98CE9147D24A89E1B7A128E42CBD4E6284F9EC7C84D3D56112D61B1CDAAFA69B721F0DE075ACA742A7D3D208BE0BE6E1D60B4957787BB5395398861DF7A5CF26F2711CA8DEB0F08D5A82D5280D9CA1166AF14558F16A37920878C23B4CB4DFE1FBB1201B81446D8E0715FD43578272EE8B689C38C7ABD714B341B40A99AAA38810821272EFE423CDE14C45D8C986E81F95825185AA50BA541B6E7A195BD342B33297BB60936BDC1964FCEBA08DC3EDF532D45E35C6D525B798369581767BAFADD963100BA5B93364B5767E72E50C115A140A70C22615BA680EDE82F3BE1B57DEBA0716ED314459E4AEEAF23595714D19816139D72211BFFB64910AE5BC4C0F419C401FA985049027E2AD9444B2C7AEEFB47018BF217B9E31263F76DE421287FB5CDD7386E13E48163C435793F30B7D216E444E4472490C6084E85E57EC2AE2981349C66CE29935A27ED3473A2D42A2DF4C7901E600C76D97B2647DAAF6AEF1141D3C76F7276B52A643F2613E6C9CCAE5F250974EFF692D2244A2229976C8F5F2AA3AB677B7E714F617FFD410B86F8203085D5762329EAB339A78AD10B714142E1844E3CDACA9E75AC19719ABAE64D559C1132AF1016CD0071ABC8C19AEDD9E64DE1D559AE61C5EFA087133BE20CF9B5DB286D8B5F99EDE5A8ADACC6505A26E57AC568CC32B26CF97330D1B440F054223FCD60488E3021852AA8B8241BB08F8B4862509316DFFA2250B97B379179EE3DC9490202DECD081C8FE22328B2126C63853719D1846E1A14B56F821DF0B3C9013220047F68D220C640BF2CA47642D0BC18625E742A65BFEBB1CC2E5398A57C023811C861D1745E0B3B7F029FC5A35D941CCB7E7189C04274D4A298F867C26E4D13BF35826B4EBF6CB75E1F036822A55A726C715DFE24279F5D252CC2275E369189520BEE55FC775B6009F7DE5AD35F57C882E99454F8ED1C160F32851A270C9316F9DB7993E9B8818BE6C56F2FC7F02043D7EFEE861391B6AF0EDF03BD7D9A1DE9F60E38BEEF98AE259469D186267F3E396AAD3F6E0350E1D43C6A9E557A30A7CE68505426BBCD7917C00008B3B06A9F417566E25D66F91A6FA4538E4EF5451DBE05840F9566EEB7315B302F3CC13356E779A3E600B375ED76887BC7657FF951980D20963E9DAFD4C6BB3EB3E54F0AE663FBB3DEF407F456AA4287EFF2E4BADCE9CBFB41BF4056AFED2F6E3DC0E4C801648195E272B0C31507A0EEE98E68EC0272C29BC4B18494B9B3C142569DC3472446958612F8D6ED6BCF3D6A1FFDC5F2D2840C0C75836B2296F5E2749DBF41049F581D57DD00C44820E419223DFCF9EB8AB987439DC6C4302A3FCFD3A7F6623F0003ECD9EE994998D7EB3DFE06B5FBEB79A67FB13687555143F3DE767AC81EFE485D5565F2193815DAE8F7C944C3A48FA211BC5366FAE79D1BCD17ACB1D5016C921A37DEE0691A514EB9234F98A0BFD04F9108697A15A847BEDE53C7AD0309316FB919DF63DAF02A10E2E72CF55DF5118151D17729E3B91312352135E28A6DAA527BF795B8DE118E4675A2FC191AD586B871D246E60356FE1265E252E57FD8513B4FEFF5712BD4FE7288677E336812FF7758D370722936CE53FDEF259D715B9A0E0B4BAD9764FB204DFF7403F2B3284B5B6A7FA380FFD4D315207B6E08ECBA2B465CC866043C0C5AAC5145986A94E394F748B63E9011062E46F2A8839499A2930EF4328959973C755DD7F3AD3529EAF9DD5A57B59C7CCEFE86E6AE91CF40FCAB2D010DDBA6A76E6BC5692714FA0CFC0D545E08F026F3C631908F5ABA01F97A6C44F507BFC8E8EA3BF63A9DAC384203C6CB270AAD395D72777B78339EE09B5A1297D1F4D016E7A26CD70AE648A749CA3D26B16F7E254E95CF8AEFBE245BBC3B78272DE561E0A16461D44FF5F091EBE6D305EEA865ACD02AB5333FCB2C057A8701748AE6DA59781EF6ED5A1AF8F8626CA15C4D156BD1CE8195FE3DF41D97F4BAC399825DA76AA45E76193E20C825CCF1CC130FCA31D21284310F86057C3FA5191675E837258F173FE11E7A67C82D2931E252FA810DA7C93A53E1C756895B376695AFCE95349ACF83C22A8F623F544690A09FAFBD9B78AC6198078A4008CEE6D1D173EBDE30DEFE4021AC0D844F127544B71FB6D0EEDDB260CC2C9FFB429CCD8281FE43D4074CB9AA6D90A0F1B2116AA0A0DA9516C2CC8C03212D57AE7DFEFCC78DAC85BF7A5C2467A85D54300EA61EB3A84610CBCE3E6FFA2BEB32A2483E4599397F7B44014E50A99EEE03770133BB46373C6589E7D437FF1171BDD217D9346E2BA0CB4EE7E589C214F72C664399C8479B272A42DDE9C7571C6940442A7542B8ED9AC2060781B19D48E439E2D5B5373466A3E56B0133F50D27E77D6CBE90885227194538C89AA5EE5932563F9EFAB2DEDF4CF1324E768ED920A478644091B9E0FEC90DF3059F546BE228B7DB3E04CD5682A72D31111E7E388676B7FDD73DE92230B41F6B892FE5C66EC83B22A230CC2BA508340BE559EF1FB1EC057B6503E9568DEE153AE6562599CE2A83E187D317431AA4D5C6CB26EAA7C6E36A09134C83D22109F9E28C68BA2657320F79D4C8E55F33B9BF1530187B085B19974632A6981F794D35558A5AC824C7CE7D9931817077C0CA591D0363A6DF865D7DA8C9A3EABE446406DAD29BCE67634403430AD91771D32F9FB2FAA9929EFC3C565A3AAC1CFA350CAFA17CC1E0D9AADA713518D48FBE1917A2862BB6816BB957696AC54F972061FCF52FD6C57D0042E88D51ECFA2B42C30EEA0D23FBD95019E759ED41AB01B7B05ED213C165A57D4E6E539FA3692EEB0F3C06A4ADE13888AA578A938EDDD3E523AF3D0F6CB6679623C3471611F27623A741237BB6AED8C28ED2B4091630A519E2FA537AACB264CD98FAB8120A47923C91B86348D2E55F3A5563BA4235A6F9CFAC450C6B5435902C80EDFA5AC064E5AAA68D7F7C1CAE01837B3690C1FD930133F56F9F71232EE528AD6050F231215F182A79F2E424B687B56EA924B39954F2A13A144141E1D29A079638AA7450CB24233D7C44BA07B0AF44850F74E649946BD2BA31FB251DE515D8FDAE0B90587D13E836BA742B414F2F14D9D9FEC9E5B92C6B7C7F997DE2B462953D1F84185390712590B59E927E2DAB0133E605AD0F2B1FE9C8E08479D077B8540BADFDE9C4CC3565CA4CBF2A1796D0B125D0AD8EC11E2D5E7CE0CEF86EB3A7387911C01E37CB873E33E9D6F6489E611EB685468F7E76202D7DD446837463E6F26EB598154F1DE0DAB4DCFF6A553C635858E8739E9E2E9376B4992C61B03AB34C61CBE3090D22FCE0DE2566C39EEDDAA9A2A4A39C15D761FDA2BC657CEC8F959722DC389E1757F6A94E4D8A3623B8A3B5AEDFDC778D3CFF0B73FA06C8EAB54B7835B7DA628969C8BC5015DF707909D1714842FCA015F9292991BE49025AE01927BF3FDB84898A89E983198F23C706E904799A0A7C32FA31791917DAF26DC4CCD36D49F9C9CA248FF7B815B0053362D99243057433043FF06B2583DCE8748749B4599719D3A07D67614674E6D4EEA1855A4C8C8150F5751BF6372601FEC3911C8353E3BE8DD36FDF45658A864296E6CB365CFFF20F84086877006E0E2B55F8D856D011C9440116C312E5477364693321A4497DC38C726D1D89332ED45FA10F4F7F1382347CF13236195DD2598F04710A8698DFF44E88B779A5168C01BA3BF5824C8D9C24411B50923AFF95CC833D94E68602C765605842B99C34CFFD5AC131D6C4414F87E65F80EDCA9F7EF1AE3EB6D2DBDB760D378A8477F5F176641FE9D97D2A62ADB4EB9512D2E78B18009A3A76D012FA270A80A122F987E2B6A894FC0671ED2DD3E26C9F96479412AECA9AFD48727D670325A5BC368861CF8A9A2C20916CE06A2F7BF98FC9C96852C05E245BFA321D23E5F19BDDB0487B02B962BFBF214818B7A16118A461138E84DC7FEF3E3BAE37484533813F4FB3DB57B334148DFCA13001479B431C28C667A55B4F8A300BCE275249DA6ECC2E574A2908271AB642FE3B2042823E2426CBEEFD604D07D70A3CF2D721A0E2267A7FE781CD7124AF8A406183B5C0E3AD93F3099389870EF447CCD5628760911609D5C21D650DD2D60E37281C524AD957B5F161A1AE639B493D7D47B6E7083D1395FBF8143BDC69EC9F896B19B54B4D56B079029256B28C58D2C915721810C54AFF743F645EF4385C79902456219C1741B296C079BBD4CEBCEC01755C84FDA1D48F83E654B23589D6564AD23276EA63D55952040A5A6E976B5AC6F5A4A29C669B0E1D5905FC4C453A3D589D4EDAE7E7AF1C4937D83EA8E872D459B16A8CC49C0663FEF81C9960C4975261CD8FFCEEA6B411B0E92D157A025DBBA3F8CA2C092E78074B1C64561031E4FB906F9E29DC912101F5B9C025D3C57E7B02BF4F28A8DBBFE7683EEA7B4EBCD716C924F237B65E5E876B70BE7A356F2D87FE408C75DBC511C68B1F48A48155D38EFBBF199C4B5EE7655D478C7FD01F3CED28F997DF9F274161ED60DD1310E1834C31396A3293E555EF5592A75C1B3DE194A33BF636D9C27C9EBB531BAF48A4087437011D69FBBB2B554116E32762D839C510CB85557B5D39E8B63E45A5C23175FF1551DC26682D6B98503A00282AB3A56CC956B83A8CF1111DA4EE1318293F97CE20F6F0A4E472A689B355FD972E5FB7215B68A4E265298A5B833B6EA30E7E10CFD80D124856D8C15442D885083A426956B8ED2238C605C8E3F28C0F3EE3AAB801D1C84104B6BD13C8509BAF5DA2ADDDDEFDEBDC29E92CF3C336D2E804D521809DAEBBCFC0C248A37032ED4837C71CD00F7ABBD504CCF9FCDF49DDE9AD215188B320154C0A995E0AF1276D8CC97D814AC428DE27127BD89BC3E09DC0291ABD3F71ADB19B8680BC6E528A1B0FDEA6891671E6242F69E9638563D5F9F308FD338A11102A5462C6E9E5F2DC3484D96FC5F4DD846B73D7C34B7A36C3BDDE61FD52CCAA8DA130D5DD8D8C6E8F5411AC4EE220BC7F9F61EE98286F474D5BF12F466DDCCB3B88D4C54251774EEA3715B75950DEC770881561603BE4265BC67ED348FB54D712871DFE277DF13A5CCF705A148E47A73CBA043A3842CEB2B8BFFE961C39CE1ED8C17E15B9F8C117CA4215FA3F84D1769057A6BB9B3296EA6F79AE7F2FB17B2326DF0608FF63DC1181C3AB6CFF1CBBA169A5C72B7F146416FB7EFFDF94AE69CD06337726692AF887BD8413F5B4B0D4C46CD6CE2371482298562E8D328C31401F2DD0E6E168EF400CFF7E822C76C81020421FF4BBE1A9F7BF9A9E3BF4937CE6572E1345C38692456B4924B8A06FA6327FCD08ACE1B964613A6E3495C4585E53333EF045B859F03552C8F811DB9EFEED3155C0025CFE42BD0A8E6E7E20BF85A7B347F4BAE286510F6BA178E6BB7EFF7260E030239DA081FE92A1C552C9379CCEDA1A60D2A80CBA56B23C6DBDCE2C4C5C2C8A012D576352E870B11F89F181836B92C5679C1436F20A0146165FEE4269F5846D67770015BB17A29385EBCD441D27CB8D514A1EF777978258E169F951F43224ACDDD313A72408EE9E7E5DA78565472F63DA6A15B4E0689F2E68B7645E983AA9B9275911ACC523978488782E020496288CA93F33D723A23CEC80A219820EFB7F6681348FDD8CE25541FDECE7258086ADF4C1932A9078A6C9B4CDE93716FE82D755DECBDFB9DC9D082609DF66C5EE0E5A8B710AC1D64A26FC8612412B41B1512B2E9096868B44AE8EA5B88DD6D5B1A083C78E0F82B46465FB9D3DA33D42B3416E032BE9E19D989F5F1AEB956F0766B626B1DBE9393EDBCB8DF4F0AB3A2446378966ADF79068BC1747D7BED04513EF78A8AB847B9E610282D9FBC885B40AB59D9C51A258DF61D4479E49CD95B57D49560CB69674EABCF3EDE477CE322F7C965716127A9FB20A310A117ECFE08960A8EB864640E883E8C4464D85B1C28BDCA8EDA8908B90CEE5A1813AE514C40231A6F9EB2D703821D97A787A5B6D0B1D7EB6AB466B79881703C4C4ED431B7432DF8B6D6CD49CBB56E212E13BC3CD728EAD7A48954C65703DFE77F21EFC52A3A41FC236A0CEE83C70542342DCE13E9DC3D643BFC4D60F3F3758205B8989BE111A164575FA23A9BB015CEE99741CBF9F16867AE10F250BCB08C5416A8D7399551C3D7E5451160B49886AAACB1CF7F39F893A25682331AE9BA9A9AC68E8183A21DC34287EDF5FFA84EDEB6E36FB49F4346432694ABECFF6E5F6E534BEBFA0C153F4CCEF358F442DA650CB840A317B90EF25BF0D17F4A387EEEFCC620D8A0BE7CB2B0D23BC76C2D97C6358BA538306CD11AAFB332DB6F506377580AF35D580FB6E55E7A3E86B3D1DC17AB7F950D407A19CCA6A14D9586ACD50E5CD033629CDA4B54693EFBB86561ACEFA58683F99E67F285054E3CA175FADFEB04891362C89CD57E795A7F54E9EFB10B5073562AFA204FCDF4317CF48F02D63822EBEBCFAFA7F32BA04365BDB99318AC19CCC97AE9E3342D2EC38FFD60969750B4D70B19546D4139CF2F2502EE785DB41EE6868C6F123816D761DE06375AA0FCFA07DDF1E2DF68C5170B9448F0193B4B654053A2D38A73668B164D51A4F0C4714317DB29D2D804106638C1292AF0095EE29E2F158284E24A8314737B2FC45A943C2E8BE195ED8CC4174574C14F7D3F90AE58FEA81C24A82593C9B3147C41260980BD5C367CA8A136C58FFEF06DC2790C266972FBBBCE0A66D674BBBFAFB8C5477C8B75C051A41EF638D2B39F2D8938F65CE3355289CC70F79AB9CA612E95915996E166878414F543A4E13D5CDA1528AC7A215613503B60DC084929B1CF68D56D76AC55D1BEF7A4C651D8E11AC0AE2C32C17559C26A2DDBCF4BDBFC278D9A71D77C0C1A49A17736C210D551781B5AF77360D093F13B1B1D4471C76CD4DCB80FC3CE8BAA15FBE5814C381051137FADF28EED6431B508FFABBDBB3023F02E0C3CFC473E6B3A77C77EDD8287704E2DAC1FB57BA1E45B6844B2FD28C3A04A65B3B7241C1B6E254EF47863F7C96A64164B781DB2081D5B86DFC95E28DBCEA89C4A27178A2134B88CF819EB4FCB79F180FC176DE115E3027B0D31D1C1
@@ -506,7 +506,7 @@ server.listen(3000, () => console.log("正在监听 3000 端口"));
506
506
  </ul>
507
507
  <h1 id="源代码"><a href="#源代码" class="headerlink" title="源代码"></a>源代码</h1><p>源代码增加了一些按钮的状态,交互更加友好,文章表达比较晦涩的地方可以跳转到源代码查看</p>
508
508
  <p><a target="_blank" rel="noopener" href="https://github.com/yeyan1996/file-upload">file-upload</a><br><img src="https://user-gold-cdn.xitu.io/2020/1/9/16f8859bdc09fa25?imageView2/0/w/1280/h/960/format/webp/ignore-error/1" alt="xuehuayu.cn"><br>谢谢观看 :)</p>
509
- <h1 id="字节跳动-EA(Enterprise-Application)前端团队招人啦~"><a href="#字节跳动-EA(Enterprise-Application)前端团队招人啦~" class="headerlink" title="字节跳动 EA(Enterprise Application)前端团队招人啦~"></a>字节跳动 EA(Enterprise Application)前端团队招人啦~</h1><p>坐标上海&#x2F;北京,校招社招都有,hc 无上限,有兴趣的欢迎投递简历至 <a href="mailto:&#49;&#x39;&#57;&#x36;&#121;&#101;&#x79;&#97;&#x6e;&#x40;&#x67;&#109;&#97;&#x69;&#x6c;&#x2e;&#x63;&#x6f;&#x6d;">&#49;&#x39;&#57;&#x36;&#121;&#101;&#x79;&#97;&#x6e;&#x40;&#x67;&#109;&#97;&#x69;&#x6c;&#x2e;&#x63;&#x6f;&#x6d;</a>,校招内推码 Q7QUGMV</p>
509
+ <h1 id="字节跳动-EA(Enterprise-Application)前端团队招人啦~"><a href="#字节跳动-EA(Enterprise-Application)前端团队招人啦~" class="headerlink" title="字节跳动 EA(Enterprise Application)前端团队招人啦~"></a>字节跳动 EA(Enterprise Application)前端团队招人啦~</h1><p>坐标上海&#x2F;北京,校招社招都有,hc 无上限,有兴趣的欢迎投递简历至 <a href="mailto:&#49;&#x39;&#x39;&#x36;&#x79;&#x65;&#x79;&#x61;&#110;&#x40;&#103;&#x6d;&#x61;&#105;&#108;&#x2e;&#99;&#111;&#x6d;">&#49;&#x39;&#x39;&#x36;&#x79;&#x65;&#x79;&#x61;&#110;&#x40;&#103;&#x6d;&#x61;&#105;&#108;&#x2e;&#99;&#111;&#x6d;</a>,校招内推码 Q7QUGMV</p>
510
510
  <h1 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h1><p><a target="_blank" rel="noopener" href="https://juejin.im/post/5da14778f265da5bb628e590">写给新手前端的各种文件上传攻略,从小图片到大文件断点续传</a></p>
511
511
  <p><a target="_blank" rel="noopener" href="https://developer.mozilla.org/zh-CN/docs/Web/API/Blob/slice">Blob.slice</a><a target="_blank" rel="noopener" href="https://developer.mozilla.org/zh-CN/docs/Web/API/Blob/slice">developer.mozilla.org&#x2F;zh-CN&#x2F;docs&#x2F;…</a>)</p>
512
512
  </div><iframe src="/donate/?AliPayQR=https://store.xuehuayu.cn/store/public/alipay_qr.jpg&amp;WeChatQR=https://store.xuehuayu.cn/store/public/wechat_qr.png&amp;UnionPayQR=null&amp;GitHub=null&amp;BTCQR=null&amp;BTCKEY=null&amp;PayPal=https://www.paypal.com/paypalme/OrdinaryPerson" style="overflow-x:hidden; overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe><div><ul class="post-copyright"><li class="post-copyright-author"><strong>本文作者:</strong>雪花雨</li><li class="post-copyright-link"><strong>本文链接:</strong><a href="/article/14192.html">https://xuehuayu.cn/article/14192.html</a></li><li class="post-copyright-license"><strong>版权声明:</strong>① 标为原创的文章为博主原创,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接。② 转载文章来自网络,已标明出处,<a href="mailto:cainiaoblog@126.com">侵删</a>。</li></ul></div><br><div class="tags"><a href="/tags/%E8%BD%AC%E8%BD%BD/">转载</a></div><div class="post-nav"><a class="pre" href="/article/45157.html">新型肺炎疫情最新动态播报汇总</a><a class="next" href="/article/54313.html">70个JavaScript面试问题</a></div><div id="vcomment"></div><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@waline/client@v2/dist/waline.min.css"><script src="//cdn.jsdelivr.net/npm/@waline/client@v2/dist/waline.js"></script><script>const origin = window.location.origin
@@ -67,7 +67,7 @@
67
67
  <li>render()</li>
68
68
  <li>componentDidMount()</li>
69
69
  </ol>
70
- <p>注意: getDerivedStateFromProps&#x2F;getSnapshotBeforeUpdate 和 componentWillMount&#x2F;componentWillReceiveProps&#x2F;componentWillUpdate 如果同时存在,React会在控制台给出警告信息,且仅执行 getDerivedStateFromProps&#x2F;getSnapshotBeforeUpdate 【<a href="mailto:&#82;&#x65;&#x61;&#x63;&#116;&#x40;&#49;&#x36;&#x2e;&#x37;&#x2e;&#48;">&#82;&#x65;&#x61;&#x63;&#116;&#x40;&#49;&#x36;&#x2e;&#x37;&#x2e;&#48;</a>】</p>
70
+ <p>注意: getDerivedStateFromProps&#x2F;getSnapshotBeforeUpdate 和 componentWillMount&#x2F;componentWillReceiveProps&#x2F;componentWillUpdate 如果同时存在,React会在控制台给出警告信息,且仅执行 getDerivedStateFromProps&#x2F;getSnapshotBeforeUpdate 【<a href="mailto:&#82;&#101;&#97;&#x63;&#116;&#64;&#x31;&#x36;&#x2e;&#x37;&#46;&#48;">&#82;&#101;&#97;&#x63;&#116;&#64;&#x31;&#x36;&#x2e;&#x37;&#46;&#48;</a>】</p>
71
71
  <blockquote>
72
72
  <p>运行时:</p>
73
73
  </blockquote>
@@ -16,8 +16,10 @@
16
16
  })();
17
17
  </script><script>var _hmt=_hmt||[];(function(){var hm=document.createElement("script");hm.src='https://hm.baidu.com/hm.js?011f0b44e8452bfa57fbfa23c5fe7683';var s=document.getElementsByTagName("script")[0];s.parentNode.insertBefore(hm, s);})();
18
18
  </script><script async src="https://www.googletagmanager.com/gtag/js?id=UA-150860401-1"></script><script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);};gtag('js',new Date());gtag('config','UA-150860401-1');
19
- </script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/fixedPage.min.js"></script><meta name="generator" content="Hexo 6.3.0"></head><body><div class="body_container"><div id="header"><div class="site-name"><a id="logo" href="/.">前端壹菜鸟</a><p class="description">关注前端知识,收集精彩博文,做技术的搬运工</p></div><div id="nav-menu"><a class="current" href="/." target="_self"><i class="fa fa-home"> 首页</i></a><a href="/archives/" target="_self"><i class="fa fa-archive"> 归档</i></a><a href="/guestbook/" target="_self"><i class="fa fa-comments"> 留言</i></a><a href="/about/" target="_self"><i class="fa fa-user"> 关于</i></a><a href="https://laonongmin.online/" target="_target"><i class="fa fa-group"> 看看</i></a><a href="https://love.xuehuayu.cn/" target="_target"><i class="fa fa-heart"> LOVE</i></a></div></div><div class="pure-g" id="layout"><div class="pure-u-1 pure-u-md-3-4"><div class="content_container"><div class="post"><h1 class="post-title c-post">vue、react、webpack、babel</h1><div class="post-meta"><span class="date">2023-03-06</span><span id="busuanzi_container_page_pv"> | <span id="busuanzi_value_page_pv"><i class="fa fa-spinner"></i></span><span> 阅读</span></span><span class="post-time"><span class="post-meta-item-text"> | </span><span class="post-meta-item-icon"><i class="fa fa-keyboard-o"></i><span class="post-count"> 4.6k</span><span class="post-meta-item-text"> 字</span></span></span><span class="post-time"> | <span class="post-meta-item-icon"><i class="fa fa-hourglass-half"></i><span class="post-count"> 20</span><span class="post-meta-item-text"> 分钟</span></span></span></div><a class="disqus-comment-count" href="/article/9c3c56c.html#vcomment"><span class="waline-comment-count" data-path="/article/9c3c56c.html"></span><span> 条评论</span></a><div class="post-content"><p>vue,react,webpack,babel 要点总结</p>
19
+ </script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/fixedPage.min.js"></script><meta name="generator" content="Hexo 6.3.0"></head><body><div class="body_container"><div id="header"><div class="site-name"><a id="logo" href="/.">前端壹菜鸟</a><p class="description">关注前端知识,收集精彩博文,做技术的搬运工</p></div><div id="nav-menu"><a class="current" href="/." target="_self"><i class="fa fa-home"> 首页</i></a><a href="/archives/" target="_self"><i class="fa fa-archive"> 归档</i></a><a href="/guestbook/" target="_self"><i class="fa fa-comments"> 留言</i></a><a href="/about/" target="_self"><i class="fa fa-user"> 关于</i></a><a href="https://laonongmin.online/" target="_target"><i class="fa fa-group"> 看看</i></a><a href="https://love.xuehuayu.cn/" target="_target"><i class="fa fa-heart"> LOVE</i></a></div></div><div class="pure-g" id="layout"><div class="pure-u-1 pure-u-md-3-4"><div class="content_container"><div class="post"><h1 class="post-title c-post">vue、react、webpack、babel</h1><div class="post-meta"><span class="date">2023-03-06</span><span id="busuanzi_container_page_pv"> | <span id="busuanzi_value_page_pv"><i class="fa fa-spinner"></i></span><span> 阅读</span></span><span class="post-time"><span class="post-meta-item-text"> | </span><span class="post-meta-item-icon"><i class="fa fa-keyboard-o"></i><span class="post-count"> 4.7k</span><span class="post-meta-item-text"> 字</span></span></span><span class="post-time"> | <span class="post-meta-item-icon"><i class="fa fa-hourglass-half"></i><span class="post-count"> 20</span><span class="post-meta-item-text"> 分钟</span></span></span></div><a class="disqus-comment-count" href="/article/9c3c56c.html#vcomment"><span class="waline-comment-count" data-path="/article/9c3c56c.html"></span><span> 条评论</span></a><div class="post-content"><p>vue,react,webpack,babel 要点总结</p>
20
20
  <span id="more"></span>
21
+
22
+ <p><a target="_blank" rel="noopener" href="https://juejin.cn/post/7146973901166215176">掘金大牛:「历时8个月」10万字前端知识体系总结(基础知识篇)</a></p>
21
23
  <h2 id="Vue"><a href="#Vue" class="headerlink" title="Vue"></a>Vue</h2><h3 id="基本使用"><a href="#基本使用" class="headerlink" title="基本使用"></a>基本使用</h3><h4 id="v-html"><a href="#v-html" class="headerlink" title="v-html"></a>v-html</h4><p>原始html内容,有xss防线</p>
22
24
  <h4 id="computed"><a href="#computed" class="headerlink" title="computed"></a>computed</h4><ul>
23
25
  <li>有缓存,data不变不会重新计算</li>
@@ -25,9 +27,7 @@
25
27
  <h4 id="watch"><a href="#watch" class="headerlink" title="watch"></a>watch</h4><p>监听引用类型,使用下面方法深度监听,但是<strong>拿不到<code>oldVal</code></strong></p>
26
28
  <figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">watch</span>:&#123;</span><br><span class="line"> <span class="attr">info</span>: &#123;</span><br><span class="line"> handler (oldVal, val) &#123;</span><br><span class="line"> <span class="variable language_">console</span>.<span class="title function_">log</span>((oldVal, val)</span><br><span class="line"> &#125;,</span><br><span class="line"> <span class="attr">deep</span>: <span class="literal">true</span></span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
27
29
 
28
- <h4 id="class-写法"><a href="#class-写法" class="headerlink" title="class 写法"></a>class 写法</h4><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">data () &#123;</span><br><span class="line"> <span class="attr">isblack</span>: <span class="literal">true</span>,</span><br><span class="line"> <span class="attr">isRed</span>: <span class="literal">false</span>,</span><br><span class="line"> </span><br><span class="line"> <span class="attr">black</span>: <span class="string">&quot;black&quot;</span>,</span><br><span class="line"> <span class="attr">red</span>: <span class="string">&quot;red&quot;</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
29
-
30
- <figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">:<span class="keyword">class</span>=&#123;<span class="attr">black</span>: isblack, <span class="attr">red</span>: isRed&#125;</span><br></pre></td></tr></table></figure>
30
+ <h4 id="class-写法"><a href="#class-写法" class="headerlink" title="class 写法"></a>class 写法</h4><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">data () &#123;</span><br><span class="line"> <span class="attr">isblack</span>: <span class="literal">true</span>,</span><br><span class="line"> <span class="attr">isRed</span>: <span class="literal">false</span>,</span><br><span class="line"> </span><br><span class="line"> <span class="attr">black</span>: <span class="string">&quot;black&quot;</span>,</span><br><span class="line"> <span class="attr">red</span>: <span class="string">&quot;red&quot;</span></span><br><span class="line">&#125;</span><br><span class="line">:<span class="keyword">class</span>=&#123;<span class="attr">black</span>: isblack, <span class="attr">red</span>: isRed&#125;</span><br></pre></td></tr></table></figure>
31
31
 
32
32
  <p>或者</p>
33
33
  <figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">:<span class="keyword">class</span>=[black, red]</span><br></pre></td></tr></table></figure>
@@ -45,8 +45,8 @@
45
45
  <li>有参数,用<code>$event</code></li>
46
46
  <li><code>event</code>是原生对象</li>
47
47
  </ul>
48
- <h5 id="事件修饰符,按键修饰符"><a href="#事件修饰符,按键修饰符" class="headerlink" title="事件修饰符,按键修饰符"></a>事件修饰符,按键修饰符</h5><p><code>@click.stop.prevent</code></p>
49
- <p><code>@click.ctrl.exact</code></p>
48
+ <h5 id="事件修饰符,按键修饰符"><a href="#事件修饰符,按键修饰符" class="headerlink" title="事件修饰符,按键修饰符"></a>事件修饰符,按键修饰符</h5><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">@click.stop.prevent</span><br><span class="line">@click.ctrl.exact</span><br></pre></td></tr></table></figure>
49
+
50
50
  <h5 id="!(观察)事件被绑定到哪里"><a href="#!(观察)事件被绑定到哪里" class="headerlink" title="!(观察)事件被绑定到哪里"></a>!(观察)事件被绑定到哪里</h5><p><code>event.target</code>的值表明事件是挂在<strong>当前元素</strong>上的</p>
51
51
  <h4 id="表单"><a href="#表单" class="headerlink" title="表单"></a>表单</h4><h5 id="v-model"><a href="#v-model" class="headerlink" title="v-model"></a>v-model</h5><p>v-model.trim</p>
52
52
  <p>v-model.lazy</p>
@@ -188,6 +188,18 @@
188
188
  <li>新增,删除 无法监听,需要用 Vue.set 和 Vue.delete</li>
189
189
  <li>无法监听数组,需要专门处理</li>
190
190
  </ul>
191
+ <h5 id="Proxy-实现响应式"><a href="#Proxy-实现响应式" class="headerlink" title="Proxy 实现响应式"></a>Proxy 实现响应式</h5><ul>
192
+ <li>基本使用</li>
193
+ <li>Reflect</li>
194
+ <li>实现响应式</li>
195
+ <li>对比 defineProperty 提高性能<ul>
196
+ <li>set第一层属性的时候,触发set</li>
197
+ <li>set第二层属性的时候触发第一层属性的get</li>
198
+ <li>所以在get的时候,返回一个 新的proxy对象即可 深度监听,而且是惰性监听</li>
199
+ <li>所以性能比defineProperty好</li>
200
+ </ul>
201
+ </li>
202
+ </ul>
191
203
  <h4 id="虚拟DOM-和-diff"><a href="#虚拟DOM-和-diff" class="headerlink" title="虚拟DOM 和 diff"></a>虚拟DOM 和 diff</h4><ul>
192
204
  <li>DOM操作非常耗性能,js是执行非常快的</li>
193
205
  <li>vue和react是数据驱动视图</li>
@@ -296,7 +308,7 @@
296
308
  <li>更好的代码组织</li>
297
309
  <li>更好的逻辑复用(options api 分散于生命周期中,代码越多越明显)</li>
298
310
  <li>更好的类型推导(直接this.a 和 this.fn,不利于类型判断 )</li>
299
- <li>不建议公用</li>
311
+ <li>不建议共用</li>
300
312
  </ul>
301
313
  <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">export default &#123;</span><br><span class="line"> data () &#123;</span><br><span class="line"> return &#123;</span><br><span class="line"> a: 10</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;,</span><br><span class="line"> methods: &#123;</span><br><span class="line"> fn () &#123;</span><br><span class="line"> const a = this.a</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;,</span><br><span class="line"> mounted: &#123;</span><br><span class="line"> this.fn()</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
302
314
 
@@ -321,7 +333,7 @@
321
333
  <li>函数命名约定为 useXxx 格式</li>
322
334
  <li>setup中引用 useXxx 函数</li>
323
335
  </ul>
324
- <h5 id="Proxy-实现响应式"><a href="#Proxy-实现响应式" class="headerlink" title="Proxy 实现响应式"></a>Proxy 实现响应式</h5><ul>
336
+ <h5 id="Proxy-实现响应式-1"><a href="#Proxy-实现响应式-1" class="headerlink" title="Proxy 实现响应式"></a>Proxy 实现响应式</h5><ul>
325
337
  <li>基本使用</li>
326
338
  <li>Reflect</li>
327
339
  <li>实现响应式</li>
@@ -410,7 +422,7 @@
410
422
  <li>reconciliation 执行diff算法,纯js计算<ul>
411
423
  <li>进行任务拆分</li>
412
424
  <li>DOM需要渲染时暂停,空闲时恢复</li>
413
- <li>window.requestUdleCallback</li>
425
+ <li>window.requestIdleCallback</li>
414
426
  </ul>
415
427
  </li>
416
428
  <li>commit 阶段,将diff结果渲染到dom中</li>
@@ -494,7 +506,7 @@
494
506
 
495
507
  <h4 id="压缩-optimization"><a href="#压缩-optimization" class="headerlink" title="压缩 optimization"></a>压缩 optimization</h4><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title class_">TerserJSPlugin</span> = <span class="built_in">require</span>(<span class="string">&#x27;terser-webpack-plugin&#x27;</span>)</span><br><span class="line"><span class="keyword">const</span> <span class="title class_">OptimizeCssAssetsplugin</span> = <span class="built_in">require</span>(<span class="string">&#x27;optimize-css-assets-webpack-plugin&#x27;</span>)</span><br><span class="line"></span><br><span class="line"><span class="variable language_">module</span>.<span class="property">exports</span> = &#123;</span><br><span class="line"> &lt;!-- 其他配置 --&gt;</span><br><span class="line"> <span class="attr">optimization</span>: &#123;</span><br><span class="line"> <span class="attr">minimizer</span>: [<span class="keyword">new</span> <span class="title class_">TerserJSPlugin</span>(&#123;&#125;), <span class="keyword">new</span> <span class="title class_">OptimizeCssAssetsplugin</span>(&#123;&#125;)]</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
496
508
 
497
- <h4 id="抽离公共代码"><a href="#抽离公共代码" class="headerlink" title="抽离公共代码"></a>抽离公共代码</h4><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line"><span class="variable language_">module</span>.<span class="property">exports</span> = &#123;</span><br><span class="line"> &lt;!-- 其他配置 --&gt;</span><br><span class="line"> <span class="attr">optimization</span>: &#123;</span><br><span class="line"> <span class="attr">minimizer</span>: [],</span><br><span class="line"> <span class="attr">splitChunks</span>: &#123;</span><br><span class="line"> <span class="comment">// initial 不处理异步</span></span><br><span class="line"> <span class="comment">// async 只处理异步</span></span><br><span class="line"> <span class="comment">// all 全部</span></span><br><span class="line"> <span class="attr">chunks</span>: <span class="string">&#x27;all&#x27;</span>,</span><br><span class="line"> <span class="attr">cacheGroups</span>: &#123;</span><br><span class="line"> <span class="comment">// 引用关系 关联 HtmlWebpackPlugin chunks 配置</span></span><br><span class="line"> <span class="comment">// 第三方模块</span></span><br><span class="line"> <span class="attr">vendor</span>: &#123;</span><br><span class="line"> <span class="attr">name</span>: <span class="string">&#x27;vendor&#x27;</span>, <span class="comment">// chunk 名称</span></span><br><span class="line"> <span class="attr">priority</span>: <span class="number">1</span>, <span class="comment">// 权限更高,有限抽离,重要!</span></span><br><span class="line"> <span class="attr">test</span>: <span class="regexp">/node_modules/</span>, <span class="comment">// </span></span><br><span class="line"> <span class="attr">minSize</span>: <span class="number">0</span>, <span class="comment">// 大小限制,实际开发不要写0</span></span><br><span class="line"> <span class="attr">minChunks</span>: <span class="number">1</span>, <span class="comment">// 最少复用go几次</span></span><br><span class="line"> &#125;,</span><br><span class="line"> <span class="attr">vendor</span>: &#123;</span><br><span class="line"> <span class="attr">name</span>: <span class="string">&#x27;common&#x27;</span>, <span class="comment">// chunk 名称</span></span><br><span class="line"> <span class="attr">priority</span>: <span class="number">0</span>, <span class="comment">// 权限更高,有限抽离,重要!</span></span><br><span class="line"> <span class="attr">minSize</span>: <span class="number">0</span>, <span class="comment">// 大小限制</span></span><br><span class="line"> <span class="attr">minChunks</span>: <span class="number">2</span>, <span class="comment">// 最少复用过几次</span></span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure>
509
+ <h4 id="抽离公共代码"><a href="#抽离公共代码" class="headerlink" title="抽离公共代码"></a>抽离公共代码</h4><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line"><span class="variable language_">module</span>.<span class="property">exports</span> = &#123;</span><br><span class="line"> &lt;!-- 其他配置 --&gt;</span><br><span class="line"> <span class="attr">optimization</span>: &#123;</span><br><span class="line"> <span class="attr">minimizer</span>: [],</span><br><span class="line"> <span class="attr">splitChunks</span>: &#123;</span><br><span class="line"> <span class="comment">// initial 不处理异步</span></span><br><span class="line"> <span class="comment">// async 只处理异步</span></span><br><span class="line"> <span class="comment">// all 全部</span></span><br><span class="line"> <span class="attr">chunks</span>: <span class="string">&#x27;all&#x27;</span>,</span><br><span class="line"> <span class="attr">cacheGroups</span>: &#123;</span><br><span class="line"> <span class="comment">// 引用关系 关联 HtmlWebpackPlugin chunks 配置</span></span><br><span class="line"> <span class="comment">// 第三方模块</span></span><br><span class="line"> <span class="attr">vendor</span>: &#123;</span><br><span class="line"> <span class="attr">name</span>: <span class="string">&#x27;vendor&#x27;</span>, <span class="comment">// chunk 名称</span></span><br><span class="line"> <span class="attr">priority</span>: <span class="number">1</span>, <span class="comment">// 权限更高,有限抽离,重要!</span></span><br><span class="line"> <span class="attr">test</span>: <span class="regexp">/node_modules/</span>, <span class="comment">// </span></span><br><span class="line"> <span class="attr">minSize</span>: <span class="number">0</span>, <span class="comment">// 大小限制,实际开发不要写0</span></span><br><span class="line"> <span class="attr">minChunks</span>: <span class="number">1</span>, <span class="comment">// 最少复用过几次</span></span><br><span class="line"> &#125;,</span><br><span class="line"> <span class="attr">vendor</span>: &#123;</span><br><span class="line"> <span class="attr">name</span>: <span class="string">&#x27;common&#x27;</span>, <span class="comment">// chunk 名称</span></span><br><span class="line"> <span class="attr">priority</span>: <span class="number">0</span>, <span class="comment">// 权限更高,有限抽离,重要!</span></span><br><span class="line"> <span class="attr">minSize</span>: <span class="number">0</span>, <span class="comment">// 大小限制</span></span><br><span class="line"> <span class="attr">minChunks</span>: <span class="number">2</span>, <span class="comment">// 最少复用过几次</span></span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure>
498
510
 
499
511
  <h4 id="异步加载"><a href="#异步加载" class="headerlink" title="异步加载"></a>异步加载</h4><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 定义 chunk</span></span><br><span class="line"><span class="keyword">import</span>(<span class="string">&#x27;./dynamic-data.js&#x27;</span>).<span class="title function_">then</span>(<span class="function"><span class="params">res</span> =&gt;</span> &#123;</span><br><span class="line"> <span class="variable language_">console</span>.<span class="title function_">log</span>(res.<span class="property">default</span>.<span class="property">message</span>)</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure>
500
512
 
@@ -515,9 +527,7 @@
515
527
  </ul>
516
528
  <h4 id="优化babel-loader"><a href="#优化babel-loader" class="headerlink" title="优化babel-loader"></a>优化babel-loader</h4><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line"> <span class="attr">test</span>: <span class="regexp">/\.js$/</span>,</span><br><span class="line"> <span class="attr">use</span>: [<span class="string">&#x27;babel-loader?cacheDirectory&#x27;</span>], <span class="comment">// 开启缓存</span></span><br><span class="line"> <span class="attr">include</span>: path.<span class="title function_">resolve</span>(__dirname, <span class="string">&#x27;src&#x27;</span>), <span class="comment">// 明确范围</span></span><br><span class="line"> <span class="comment">// 排除范围, 两者选一即可</span></span><br><span class="line"> <span class="comment">// exclude: path.resolve(__dirname, &#x27;node_modules&#x27;)</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
517
529
 
518
- <h4 id="IgnorePlugin,直接不引入,代码中没有"><a href="#IgnorePlugin,直接不引入,代码中没有" class="headerlink" title="IgnorePlugin,直接不引入,代码中没有"></a>IgnorePlugin,直接不引入,代码中没有</h4><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 不引入所有语言包</span></span><br><span class="line"><span class="keyword">new</span> webpack.<span class="title class_">IgnorePlugin</span>(<span class="regexp">/\.\/locale/</span>, <span class="regexp">/moment/</span>)</span><br></pre></td></tr></table></figure>
519
-
520
- <figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 手动引入中文</span></span><br><span class="line">moment.<span class="title function_">locale</span>(<span class="string">&#x27;zh-cn&#x27;</span>)</span><br></pre></td></tr></table></figure>
530
+ <h4 id="IgnorePlugin,直接不引入,代码中没有"><a href="#IgnorePlugin,直接不引入,代码中没有" class="headerlink" title="IgnorePlugin,直接不引入,代码中没有"></a>IgnorePlugin,直接不引入,代码中没有</h4><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 不引入所有语言包</span></span><br><span class="line"><span class="keyword">new</span> webpack.<span class="title class_">IgnorePlugin</span>(<span class="regexp">/\.\/locale/</span>, <span class="regexp">/moment/</span>)</span><br><span class="line"><span class="comment">// 手动引入中文</span></span><br><span class="line">moment.<span class="title function_">locale</span>(<span class="string">&#x27;zh-cn&#x27;</span>)</span><br></pre></td></tr></table></figure>
521
531
 
522
532
  <h4 id="noParse,引入,但不打包"><a href="#noParse,引入,但不打包" class="headerlink" title="noParse,引入,但不打包"></a>noParse,引入,但不打包</h4><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">modules.<span class="property">exports</span>=&#123;</span><br><span class="line"> <span class="attr">module</span>: &#123;</span><br><span class="line"> <span class="attr">noParse</span>: [<span class="regexp">/react\.min\.js/</span>],</span><br><span class="line"> <span class="attr">rules</span>: [</span><br><span class="line"> &#123;&#125;</span><br><span class="line"> ]</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure>
523
533
 
@@ -542,7 +552,55 @@
542
552
  <script src="./react.dll.js"></script>
543
553
 
544
554
  <p>3、配置webpack.dev.js</p>
545
- <figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="attr">moduls</span>: &#123;</span><br><span class="line"></span><br><span class="line"> <span class="attr">rules</span>: [</span><br><span class="line"> &#123;</span><br><span class="line"> <span class="attr">test</span>: <span class="regexp">/\.js$/</span>,</span><br><span class="line"> <span class="attr">loader</span>: [<span class="string">&#x27;babel-loader&#x27;</span>],</span><br><span class="line"> <span class="attr">include</span>: srcPath,</span><br><span class="line"> <span class="attr">exclude</span>: <span class="regexp">/node_modules/</span> <span class="comment">// 使用dll,所以不需要转换了</span></span><br><span class="line"> &#125;</span><br><span class="line"> ]</span><br><span class="line"></span><br><span class="line">&#125;,</span><br><span class="line"></span><br><span class="line"><span class="attr">plugins</span>: [</span><br><span class="line"></span><br><span class="line"> <span class="keyword">new</span> <span class="title class_">DllReferencePlugin</span>(&#123;</span><br><span class="line"> <span class="attr">mainfest</span>: <span class="built_in">require</span>(path.<span class="title function_">join</span>(distPath, <span class="string">&#x27;react.mainfest.json&#x27;</span>))</span><br><span class="line"> &#125;)</span><br><span class="line"></span><br><span class="line">]</span><br><span class="line"></span><br><span class="line"><span class="string">``</span><span class="string">``</span></span><br><span class="line"></span><br><span class="line">#### webpack 优化构建速度 (可用于生产环境)</span><br><span class="line"></span><br><span class="line">* 优化 babel-loader</span><br><span class="line">* <span class="title class_">IgnorePlugin</span></span><br><span class="line">* noParse</span><br><span class="line">* happyPack</span><br><span class="line">* parellelUglifyPlugin</span><br><span class="line"></span><br><span class="line">#### webpack 优化构建速度 (不可用于生产环境)</span><br><span class="line"></span><br><span class="line">* 自动刷新</span><br><span class="line">* 热更新</span><br><span class="line">* <span class="title class_">DllPlugin</span></span><br><span class="line"></span><br><span class="line">#### webpack性能优化 - 产出代码</span><br><span class="line"></span><br><span class="line">* 体积更小</span><br><span class="line">* 合理分包,不重复引用</span><br><span class="line">* 速度更快,内损使用更少</span><br><span class="line"></span><br><span class="line">* 小图片base64编码</span><br><span class="line">* bundle + hash</span><br><span class="line">* 懒加载 <span class="keyword">import</span> 语法</span><br><span class="line">* 提取公共代码 splitChunks</span><br><span class="line">* <span class="title class_">IgnorePlugin</span></span><br><span class="line">* cdn加速</span><br><span class="line">* 使用 production</span><br><span class="line">* <span class="title class_">Scope</span> <span class="title class_">Hosting</span> 改变打包作用域</span><br><span class="line"></span><br><span class="line">##### 使用 production</span><br><span class="line"></span><br><span class="line">* 自动开启代码压缩</span><br><span class="line">* <span class="title class_">Vue</span> <span class="title class_">React</span> 等会自动删除调试代码(如开发环境的warning)</span><br><span class="line">* 启动 <span class="title class_">Tree</span>-<span class="title class_">Shaking</span></span><br><span class="line"></span><br><span class="line">##### <span class="title class_">Scope</span> <span class="title class_">Hosting</span></span><br><span class="line"></span><br><span class="line">* 代码体积更小</span><br><span class="line">* 创建函数作用域更少</span><br><span class="line">* 代码可读性更好</span><br><span class="line"></span><br><span class="line"><span class="string">``</span><span class="string">`js</span></span><br><span class="line"><span class="string">const ModuleConcatenationPlugin = require(&#x27;webpack/lib/optmize/ModuleConcatenationPlugin&#x27;)</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">module.exports = &#123;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string"> resolve: &#123;</span></span><br><span class="line"><span class="string"> // 针对npm中的第三方模块有限采用 jsnext:main 中指向的es6 模块化语法的文件</span></span><br><span class="line"><span class="string"> mainFields: [&#x27;jsnext:main&#x27;, &#x27;browser&#x27;, &#x27;main&#x27;]</span></span><br><span class="line"><span class="string"> &#125;,</span></span><br><span class="line"><span class="string"> plugins: [</span></span><br><span class="line"><span class="string"> // 开启 Scope Hosting</span></span><br><span class="line"><span class="string"> new ModuleConcatenationPlugin()</span></span><br><span class="line"><span class="string"> ]</span></span><br><span class="line"><span class="string">&#125;</span></span><br><span class="line"><span class="string"></span></span><br></pre></td></tr></table></figure>
555
+ <figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="attr">moduls</span>: &#123;</span><br><span class="line"></span><br><span class="line"> <span class="attr">rules</span>: [</span><br><span class="line"> &#123;</span><br><span class="line"> <span class="attr">test</span>: <span class="regexp">/\.js$/</span>,</span><br><span class="line"> <span class="attr">loader</span>: [<span class="string">&#x27;babel-loader&#x27;</span>],</span><br><span class="line"> <span class="attr">include</span>: srcPath,</span><br><span class="line"> <span class="attr">exclude</span>: <span class="regexp">/node_modules/</span> <span class="comment">// 使用dll,所以不需要转换了</span></span><br><span class="line"> &#125;</span><br><span class="line"> ]</span><br><span class="line"></span><br><span class="line">&#125;,</span><br><span class="line"></span><br><span class="line"><span class="attr">plugins</span>: [</span><br><span class="line"></span><br><span class="line"> <span class="keyword">new</span> <span class="title class_">DllReferencePlugin</span>(&#123;</span><br><span class="line"> <span class="attr">mainfest</span>: <span class="built_in">require</span>(path.<span class="title function_">join</span>(distPath, <span class="string">&#x27;react.mainfest.json&#x27;</span>))</span><br><span class="line"> &#125;)</span><br><span class="line"></span><br><span class="line">]</span><br><span class="line"></span><br></pre></td></tr></table></figure>
556
+
557
+ <h4 id="webpack-优化构建速度-(可用于生产环境)"><a href="#webpack-优化构建速度-(可用于生产环境)" class="headerlink" title="webpack 优化构建速度 (可用于生产环境)"></a>webpack 优化构建速度 (可用于生产环境)</h4><ul>
558
+ <li>优化 babel-loader</li>
559
+ <li>IgnorePlugin</li>
560
+ <li>noParse</li>
561
+ <li>happyPack</li>
562
+ <li>parellelUglifyPlugin</li>
563
+ </ul>
564
+ <h4 id="webpack-优化构建速度-(不可用于生产环境)"><a href="#webpack-优化构建速度-(不可用于生产环境)" class="headerlink" title="webpack 优化构建速度 (不可用于生产环境)"></a>webpack 优化构建速度 (不可用于生产环境)</h4><ul>
565
+ <li>自动刷新</li>
566
+ <li>热更新</li>
567
+ <li>DllPlugin</li>
568
+ </ul>
569
+ <h4 id="webpack性能优化-产出代码"><a href="#webpack性能优化-产出代码" class="headerlink" title="webpack性能优化 - 产出代码"></a>webpack性能优化 - 产出代码</h4><ul>
570
+ <li><p>体积更小</p>
571
+ </li>
572
+ <li><p>合理分包,不重复引用</p>
573
+ </li>
574
+ <li><p>速度更快,内损使用更少</p>
575
+ </li>
576
+ <li><p>小图片base64编码</p>
577
+ </li>
578
+ <li><p>bundle + hash</p>
579
+ </li>
580
+ <li><p>懒加载 import 语法</p>
581
+ </li>
582
+ <li><p>提取公共代码 splitChunks</p>
583
+ </li>
584
+ <li><p>IgnorePlugin</p>
585
+ </li>
586
+ <li><p>cdn加速</p>
587
+ </li>
588
+ <li><p>使用 production</p>
589
+ </li>
590
+ <li><p>Scope Hosting 改变打包作用域</p>
591
+ </li>
592
+ </ul>
593
+ <h5 id="使用-production"><a href="#使用-production" class="headerlink" title="使用 production"></a>使用 production</h5><ul>
594
+ <li>自动开启代码压缩</li>
595
+ <li>Vue React 等会自动删除调试代码(如开发环境的warning)</li>
596
+ <li>启动 Tree-Shaking</li>
597
+ </ul>
598
+ <h5 id="Scope-Hosting"><a href="#Scope-Hosting" class="headerlink" title="Scope Hosting"></a>Scope Hosting</h5><ul>
599
+ <li>代码体积更小</li>
600
+ <li>创建函数作用域更少</li>
601
+ <li>代码可读性更好</li>
602
+ </ul>
603
+ <figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title class_">ModuleConcatenationPlugin</span> = <span class="built_in">require</span>(<span class="string">&#x27;webpack/lib/optmize/ModuleConcatenationPlugin&#x27;</span>)</span><br><span class="line"></span><br><span class="line"><span class="variable language_">module</span>.<span class="property">exports</span> = &#123;</span><br><span class="line"></span><br><span class="line"> <span class="attr">resolve</span>: &#123;</span><br><span class="line"> <span class="comment">// 针对npm中的第三方模块有限采用 jsnext:main 中指向的es6 模块化语法的文件</span></span><br><span class="line"> <span class="attr">mainFields</span>: [<span class="string">&#x27;jsnext:main&#x27;</span>, <span class="string">&#x27;browser&#x27;</span>, <span class="string">&#x27;main&#x27;</span>]</span><br><span class="line"> &#125;,</span><br><span class="line"> <span class="attr">plugins</span>: [</span><br><span class="line"> <span class="comment">// 开启 Scope Hosting</span></span><br><span class="line"> <span class="keyword">new</span> <span class="title class_">ModuleConcatenationPlugin</span>()</span><br><span class="line"> ]</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure>
546
604
 
547
605
  <h2 id="babel"><a href="#babel" class="headerlink" title="babel"></a>babel</h2><ul>
548
606
  <li>环境搭建 , 基本配置<ul>
@@ -563,7 +621,8 @@
563
621
  <li>污染全局环境,使用babel-runtime解决</li>
564
622
  </ul>
565
623
  <p>。babelrc中</p>
566
- <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">plugins: [</span><br><span class="line"> [</span><br><span class="line"> &quot;@babel/plugin-transform-runtime&quot;,</span><br><span class="line"> &#123;</span><br><span class="line"> &quot;absoluteRuntime&quot;: false,</span><br><span class="line"> &quot;corejs&quot;: 3,</span><br><span class="line"> &quot;helpers&quot;: true,</span><br><span class="line"> &quot;regenerator&quot;: true,</span><br><span class="line"> &quot;useESModules&quot;: false</span><br><span class="line"> &#125;</span><br><span class="line"> ]</span><br><span class="line">]</span><br><span class="line"></span><br><span class="line"></span><br></pre></td></tr></table></figure></div><iframe src="/donate/?AliPayQR=https://store.xuehuayu.cn/store/public/alipay_qr.jpg&amp;WeChatQR=https://store.xuehuayu.cn/store/public/wechat_qr.png&amp;UnionPayQR=null&amp;GitHub=null&amp;BTCQR=null&amp;BTCKEY=null&amp;PayPal=https://www.paypal.com/paypalme/OrdinaryPerson" style="overflow-x:hidden; overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe><div><ul class="post-copyright"><li class="post-copyright-author"><strong>本文作者:</strong>雪花雨</li><li class="post-copyright-link"><strong>本文链接:</strong><a href="/article/9c3c56c.html">https://xuehuayu.cn/article/9c3c56c.html</a></li><li class="post-copyright-license"><strong>版权声明:</strong>① 标为原创的文章为博主原创,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接。② 转载文章来自网络,已标明出处,<a href="mailto:cainiaoblog@126.com">侵删</a>。</li></ul></div><br><div class="tags"></div><div class="post-nav"><a class="next" href="/article/84c9ccd6.html">精读《SolidJS》</a></div><div id="vcomment"></div><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@waline/client@v2/dist/waline.min.css"><script src="//cdn.jsdelivr.net/npm/@waline/client@v2/dist/waline.js"></script><script>const origin = window.location.origin
624
+ <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">plugins: [</span><br><span class="line"> [</span><br><span class="line"> &quot;@babel/plugin-transform-runtime&quot;,</span><br><span class="line"> &#123;</span><br><span class="line"> &quot;absoluteRuntime&quot;: false,</span><br><span class="line"> &quot;corejs&quot;: 3,</span><br><span class="line"> &quot;helpers&quot;: true,</span><br><span class="line"> &quot;regenerator&quot;: true,</span><br><span class="line"> &quot;useESModules&quot;: false</span><br><span class="line"> &#125;</span><br><span class="line"> ]</span><br><span class="line">]</span><br><span class="line"></span><br></pre></td></tr></table></figure>
625
+ </div><iframe src="/donate/?AliPayQR=https://store.xuehuayu.cn/store/public/alipay_qr.jpg&amp;WeChatQR=https://store.xuehuayu.cn/store/public/wechat_qr.png&amp;UnionPayQR=null&amp;GitHub=null&amp;BTCQR=null&amp;BTCKEY=null&amp;PayPal=https://www.paypal.com/paypalme/OrdinaryPerson" style="overflow-x:hidden; overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe><div><ul class="post-copyright"><li class="post-copyright-author"><strong>本文作者:</strong>雪花雨</li><li class="post-copyright-link"><strong>本文链接:</strong><a href="/article/9c3c56c.html">https://xuehuayu.cn/article/9c3c56c.html</a></li><li class="post-copyright-license"><strong>版权声明:</strong>① 标为原创的文章为博主原创,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接。② 转载文章来自网络,已标明出处,<a href="mailto:cainiaoblog@126.com">侵删</a>。</li></ul></div><br><div class="tags"></div><div class="post-nav"><a class="next" href="/article/84c9ccd6.html">精读《SolidJS》</a></div><div id="vcomment"></div><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@waline/client@v2/dist/waline.min.css"><script src="//cdn.jsdelivr.net/npm/@waline/client@v2/dist/waline.js"></script><script>const origin = window.location.origin
567
626
  const serverURL = origin.includes('cainiaoblog') ? 'https://cmts.cainiaoblog.cn' : 'https://cmts.xuehuayu.cn'
568
627
  const locale = {
569
628
  placeholder: '请正确填写昵称和邮箱,方便接收回复通知~',