0x60806040523480156200001157600080fd5b50604051620049d4380380620049d48339818101604052810190620000379190620005fc565b6040518060400160405280600581526020017f46414b54530000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f464b5400000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000bb929190620003af565b508060019080519060200190620000d4929190620003af565b5050506001600681905550620000ff620000f36200013360201b60201c565b6200013b60201b60201c565b806010908051906020019062000117929190620003af565b506200012c336101f46200020160201b60201c565b50620007cd565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000211620003a560201b60201c565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff16111562000272576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200026990620006d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620002e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002dc9062000746565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600860008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b6000612710905090565b828054620003bd9062000797565b90600052602060002090601f016020900481019282620003e157600085556200042d565b82601f10620003fc57805160ff19168380011785556200042d565b828001600101855582156200042d579182015b828111156200042c5782518255916020019190600101906200040f565b5b5090506200043c919062000440565b5090565b5b808211156200045b57600081600090555060010162000441565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004c8826200047d565b810181811067ffffffffffffffff82111715620004ea57620004e96200048e565b5b80604052505050565b6000620004ff6200045f565b90506200050d8282620004bd565b919050565b600067ffffffffffffffff82111562000530576200052f6200048e565b5b6200053b826200047d565b9050602081019050919050565b60005b83811015620005685780820151818401526020810190506200054b565b8381111562000578576000848401525b50505050565b6000620005956200058f8462000512565b620004f3565b905082815260208101848484011115620005b457620005b362000478565b5b620005c184828562000548565b509392505050565b600082601f830112620005e157620005e062000473565b5b8151620005f38482602086016200057e565b91505092915050565b60006020828403121562000615576200061462000469565b5b600082015167ffffffffffffffff8111156200063657620006356200046e565b5b6200064484828501620005c9565b91505092915050565b600082825260208201905092915050565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b6000620006bc602a836200064d565b9150620006c9826200065e565b604082019050919050565b60006020820190508181036000830152620006ef81620006ad565b9050919050565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b60006200072e6019836200064d565b91506200073b82620006f6565b602082019050919050565b6000602082019050818103600083015262000761816200071f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620007b057607f821691505b60208210811415620007c757620007c662000768565b5b50919050565b6141f780620007dd6000396000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c8063907322c311610125578063cea0e941116100ad578063e985e9c51161007c578063e985e9c5146105fc578063ef8319cd1461062c578063f2fde38b1461064a578063f4bd56b614610666578063fb2a1614146106825761021c565b8063cea0e94114610586578063d547cfb7146105a2578063d696decf146105c0578063d6ff621b146105de5761021c565b80639f8779a4116100f45780639f8779a4146104e6578063a22cb46514610502578063b88d4fde1461051e578063c87b56dd1461053a578063ccdc02941461056a5761021c565b8063907322c314610470578063950a8c971461048c57806395d89b41146104aa5780639af29057146104c85761021c565b806342842e0e116101a85780636e910f12116101775780636e910f12146103e057806370a08231146103fc578063715018a61461042c57806378763ae3146104365780638da5cb5b146104525761021c565b806342842e0e1461035c578063540fc0471461037857806355f804b3146103945780636352211e146103b05761021c565b8063095ea7b3116101ef578063095ea7b3146102bb57806323b872dd146102d7578063258bc0ef146102f35780632a55205a1461030f5780633f7905ab146103405761021c565b806301ffc9a71461022157806306fd7f2e1461025157806306fdde031461026d578063081812fc1461028b575b600080fd5b61023b60048036038101906102369190612b06565b6106a0565b6040516102489190612b4e565b60405180910390f35b61026b60048036038101906102669190612c0b565b6106b2565b005b6102756106c8565b6040516102829190612ce4565b60405180910390f35b6102a560048036038101906102a09190612d3c565b61075a565b6040516102b29190612d78565b60405180910390f35b6102d560048036038101906102d09190612d93565b6107a0565b005b6102f160048036038101906102ec9190612dd3565b6108b8565b005b61030d60048036038101906103089190612e5c565b610918565b005b61032960048036038101906103249190612e89565b61092a565b604051610337929190612ed8565b60405180910390f35b61035a60048036038101906103559190612e5c565b610b15565b005b61037660048036038101906103719190612dd3565b610b27565b005b610392600480360381019061038d9190612d93565b610b47565b005b6103ae60048036038101906103a99190612f66565b610cd7565b005b6103ca60048036038101906103c59190612d3c565b610cf5565b6040516103d79190612d78565b60405180910390f35b6103fa60048036038101906103f59190612fb3565b610d7c565b005b61041660048036038101906104119190613006565b610e58565b6040516104239190613033565b60405180910390f35b610434610f10565b005b610450600480360381019061044b9190612e5c565b610f24565b005b61045a610f36565b6040516104679190612d78565b60405180910390f35b61048a60048036038101906104859190612e5c565b610f60565b005b610494610f72565b6040516104a19190612d78565b60405180910390f35b6104b2610f98565b6040516104bf9190612ce4565b60405180910390f35b6104d061102a565b6040516104dd919061305d565b60405180910390f35b61050060048036038101906104fb91906130ce565b611030565b005b61051c600480360381019061051791906131a9565b6111c9565b005b61053860048036038101906105339190613319565b6111df565b005b610554600480360381019061054f9190612d3c565b611241565b6040516105619190612ce4565b60405180910390f35b610584600480360381019061057f919061339c565b6112a9565b005b6105a0600480360381019061059b9190612e5c565b611428565b005b6105aa61143a565b6040516105b79190612ce4565b60405180910390f35b6105c86114c8565b6040516105d5919061305d565b60405180910390f35b6105e66114ce565b6040516105f3919061305d565b60405180910390f35b6106166004803603810190610611919061344b565b6114d4565b6040516106239190612b4e565b60405180910390f35b610634611568565b604051610641919061305d565b60405180910390f35b610664600480360381019061065f9190613006565b61156e565b005b610680600480360381019061067b9190613006565b6115f2565b005b61068a61163e565b604051610697919061305d565b60405180910390f35b60006106ab82611644565b9050919050565b6106ba6116be565b6106c4828261173c565b5050565b6060600080546106d7906134ba565b80601f0160208091040260200160405190810160405280929190818152602001828054610703906134ba565b80156107505780601f1061072557610100808354040283529160200191610750565b820191906000526020600020905b81548152906001019060200180831161073357829003601f168201915b5050505050905090565b6000610765826118d2565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107ab82610cf5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561081c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108139061355e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661083b61191d565b73ffffffffffffffffffffffffffffffffffffffff16148061086a57506108698161086461191d565b6114d4565b5b6108a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a0906135f0565b60405180910390fd5b6108b38383611925565b505050565b6108c96108c361191d565b826119de565b610908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ff90613682565b60405180910390fd5b610913838383611a73565b505050565b6109206116be565b80600f8190555050565b6000806000600960008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161415610ac05760086040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b6000610aca611d6d565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff1686610af691906136d1565b610b00919061375a565b90508160000151819350935050509250929050565b610b1d6116be565b80600c8190555050565b610b42838383604051806020016040528060008152506111df565b505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bce906137d7565b60405180910390fd5b60003090508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401610c2c9190613033565b60206040518083038186803b158015610c4457600080fd5b505afa158015610c58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7c919061380c565b73ffffffffffffffffffffffffffffffffffffffff1614610cd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc990613885565b60405180910390fd5b505050565b610cdf6116be565b818160109190610cf09291906129f7565b505050565b600080610d0183611d77565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6a906138f1565b60405180910390fd5b80915050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e03906137d7565b60405180910390fd5b610e14611db4565b60005b81811015610e4a57610e298484611e04565b8280610e3490613911565b9350508080610e4290613911565b915050610e17565b50610e53611e22565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec0906139cc565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f186116be565b610f226000611e2c565b565b610f2c6116be565b80600e8190555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f686116be565b80600b8190555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054610fa7906134ba565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd3906134ba565b80156110205780601f10610ff557610100808354040283529160200191611020565b820191906000526020600020905b81548152906001019060200180831161100357829003601f168201915b5050505050905090565b600b5481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b7906137d7565b60405180910390fd5b6110c8611db4565b600087876040516020016110dd929190613a55565b6040516020818303038152906040528051906020012090506000600184141561110a57600d54905061112e565b600284141561111d57600e54905061112d565b600384141561112c57600f5490505b5b5b600061113c88888486611ef2565b90508061117e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117590613acd565b60405180910390fd5b60005b848110156111b4576111938b88611e04565b868061119e90613911565b97505080806111ac90613911565b915050611181565b505050506111c0611e22565b50505050505050565b6111db6111d461191d565b8383611f0b565b5050565b6111f06111ea61191d565b836119de565b61122f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122690613682565b60405180910390fd5b61123b84848484612078565b50505050565b606061124c826118d2565b60006112566120d4565b9050600081511161127657604051806020016040528060008152506112a1565b8061128084612166565b604051602001611291929190613b29565b6040516020818303038152906040525b915050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611339576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611330906137d7565b60405180910390fd5b611341611db4565b60008787604051602001611356929190613a55565b604051602081830303815290604052805190602001209050600060011515841515141561138757600b54905061138d565b600c5490505b600061139b88888486611ef2565b9050806113dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d490613acd565b60405180910390fd5b60005b84811015611413576113f28b88611e04565b86806113fd90613911565b975050808061140b90613911565b9150506113e0565b5050505061141f611e22565b50505050505050565b6114306116be565b80600d8190555050565b60108054611447906134ba565b80601f0160208091040260200160405190810160405280929190818152602001828054611473906134ba565b80156114c05780601f10611495576101008083540402835291602001916114c0565b820191906000526020600020905b8154815290600101906020018083116114a357829003601f168201915b505050505081565b600d5481565b600c5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600f5481565b6115766116be565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dd90613bbf565b60405180910390fd5b6115ef81611e2c565b50565b6115fa6116be565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806116b757506116b68261223e565b5b9050919050565b6116c661191d565b73ffffffffffffffffffffffffffffffffffffffff166116e4610f36565b73ffffffffffffffffffffffffffffffffffffffff161461173a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173190613c2b565b60405180910390fd5b565b611744611d6d565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff1611156117a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179990613cbd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180990613d29565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600860008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b6118db81612320565b61191a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611911906138f1565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661199883610cf5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806119ea83610cf5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a2c5750611a2b81856114d4565b5b80611a6a57508373ffffffffffffffffffffffffffffffffffffffff16611a528461075a565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611a9382610cf5565b73ffffffffffffffffffffffffffffffffffffffff1614611ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae090613dbb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5090613e4d565b60405180910390fd5b611b668383836001612361565b8273ffffffffffffffffffffffffffffffffffffffff16611b8682610cf5565b73ffffffffffffffffffffffffffffffffffffffff1614611bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd390613dbb565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d688383836001612367565b505050565b6000612710905090565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60026006541415611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df190613eb9565b60405180910390fd5b6002600681905550565b611e1e82826040518060200160405280600081525061236d565b5050565b6001600681905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600082611f008686856123c8565b149050949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7190613f25565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161206b9190612b4e565b60405180910390a3505050565b612083848484611a73565b61208f84848484612420565b6120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c590613fb7565b60405180910390fd5b50505050565b6060601080546120e3906134ba565b80601f016020809104026020016040519081016040528092919081815260200182805461210f906134ba565b801561215c5780601f106121315761010080835404028352916020019161215c565b820191906000526020600020905b81548152906001019060200180831161213f57829003601f168201915b5050505050905090565b606060006001612175846125b7565b01905060008167ffffffffffffffff811115612194576121936131ee565b5b6040519080825280601f01601f1916602001820160405280156121c65781602001600182028036833780820191505090505b509050600082602001820190505b600115612233578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161221d5761221c61372b565b5b049450600085141561222e57612233565b6121d4565b819350505050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061230957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061231957506123188261270a565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff1661234283611d77565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b50505050565b50505050565b6123778383612774565b6123846000848484612420565b6123c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ba90613fb7565b60405180910390fd5b505050565b60008082905060005b85859050811015612414576123ff828787848181106123f3576123f2613fd7565b5b90506020020135612992565b9150808061240c90613911565b9150506123d1565b50809150509392505050565b60006124418473ffffffffffffffffffffffffffffffffffffffff166129bd565b156125aa578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261246a61191d565b8786866040518563ffffffff1660e01b815260040161248c949392919061405b565b602060405180830381600087803b1580156124a657600080fd5b505af19250505080156124d757506040513d601f19601f820116820180604052508101906124d491906140bc565b60015b61255a573d8060008114612507576040519150601f19603f3d011682016040523d82523d6000602084013e61250c565b606091505b50600081511415612552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254990613fb7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506125af565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612615577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161260b5761260a61372b565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612652576d04ee2d6d415b85acef810000000083816126485761264761372b565b5b0492506020810190505b662386f26fc10000831061268157662386f26fc1000083816126775761267661372b565b5b0492506010810190505b6305f5e10083106126aa576305f5e10083816126a05761269f61372b565b5b0492506008810190505b61271083106126cf5761271083816126c5576126c461372b565b5b0492506004810190505b606483106126f257606483816126e8576126e761372b565b5b0492506002810190505b600a8310612701576001810190505b80915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127db90614135565b60405180910390fd5b6127ed81612320565b1561282d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612824906141a1565b60405180910390fd5b61283b600083836001612361565b61284481612320565b15612884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287b906141a1565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461298e600083836001612367565b5050565b60008183106129aa576129a582846129e0565b6129b5565b6129b483836129e0565b5b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b828054612a03906134ba565b90600052602060002090601f016020900481019282612a255760008555612a6c565b82601f10612a3e57803560ff1916838001178555612a6c565b82800160010185558215612a6c579182015b82811115612a6b578235825591602001919060010190612a50565b5b509050612a799190612a7d565b5090565b5b80821115612a96576000816000905550600101612a7e565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612ae381612aae565b8114612aee57600080fd5b50565b600081359050612b0081612ada565b92915050565b600060208284031215612b1c57612b1b612aa4565b5b6000612b2a84828501612af1565b91505092915050565b60008115159050919050565b612b4881612b33565b82525050565b6000602082019050612b636000830184612b3f565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b9482612b69565b9050919050565b612ba481612b89565b8114612baf57600080fd5b50565b600081359050612bc181612b9b565b92915050565b60006bffffffffffffffffffffffff82169050919050565b612be881612bc7565b8114612bf357600080fd5b50565b600081359050612c0581612bdf565b92915050565b60008060408385031215612c2257612c21612aa4565b5b6000612c3085828601612bb2565b9250506020612c4185828601612bf6565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612c85578082015181840152602081019050612c6a565b83811115612c94576000848401525b50505050565b6000601f19601f8301169050919050565b6000612cb682612c4b565b612cc08185612c56565b9350612cd0818560208601612c67565b612cd981612c9a565b840191505092915050565b60006020820190508181036000830152612cfe8184612cab565b905092915050565b6000819050919050565b612d1981612d06565b8114612d2457600080fd5b50565b600081359050612d3681612d10565b92915050565b600060208284031215612d5257612d51612aa4565b5b6000612d6084828501612d27565b91505092915050565b612d7281612b89565b82525050565b6000602082019050612d8d6000830184612d69565b92915050565b60008060408385031215612daa57612da9612aa4565b5b6000612db885828601612bb2565b9250506020612dc985828601612d27565b9150509250929050565b600080600060608486031215612dec57612deb612aa4565b5b6000612dfa86828701612bb2565b9350506020612e0b86828701612bb2565b9250506040612e1c86828701612d27565b9150509250925092565b6000819050919050565b612e3981612e26565b8114612e4457600080fd5b50565b600081359050612e5681612e30565b92915050565b600060208284031215612e7257612e71612aa4565b5b6000612e8084828501612e47565b91505092915050565b60008060408385031215612ea057612e9f612aa4565b5b6000612eae85828601612d27565b9250506020612ebf85828601612d27565b9150509250929050565b612ed281612d06565b82525050565b6000604082019050612eed6000830185612d69565b612efa6020830184612ec9565b9392505050565b600080fd5b600080fd5b600080fd5b60008083601f840112612f2657612f25612f01565b5b8235905067ffffffffffffffff811115612f4357612f42612f06565b5b602083019150836001820283011115612f5f57612f5e612f0b565b5b9250929050565b60008060208385031215612f7d57612f7c612aa4565b5b600083013567ffffffffffffffff811115612f9b57612f9a612aa9565b5b612fa785828601612f10565b92509250509250929050565b600080600060608486031215612fcc57612fcb612aa4565b5b6000612fda86828701612bb2565b9350506020612feb86828701612d27565b9250506040612ffc86828701612d27565b9150509250925092565b60006020828403121561301c5761301b612aa4565b5b600061302a84828501612bb2565b91505092915050565b60006020820190506130486000830184612ec9565b92915050565b61305781612e26565b82525050565b6000602082019050613072600083018461304e565b92915050565b60008083601f84011261308e5761308d612f01565b5b8235905067ffffffffffffffff8111156130ab576130aa612f06565b5b6020830191508360208202830111156130c7576130c6612f0b565b5b9250929050565b600080600080600080600060c0888a0312156130ed576130ec612aa4565b5b60006130fb8a828b01612bb2565b975050602061310c8a828b01612d27565b965050604088013567ffffffffffffffff81111561312d5761312c612aa9565b5b6131398a828b01613078565b9550955050606061314c8a828b01612d27565b935050608061315d8a828b01612d27565b92505060a061316e8a828b01612d27565b91505092959891949750929550565b61318681612b33565b811461319157600080fd5b50565b6000813590506131a38161317d565b92915050565b600080604083850312156131c0576131bf612aa4565b5b60006131ce85828601612bb2565b92505060206131df85828601613194565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61322682612c9a565b810181811067ffffffffffffffff82111715613245576132446131ee565b5b80604052505050565b6000613258612a9a565b9050613264828261321d565b919050565b600067ffffffffffffffff821115613284576132836131ee565b5b61328d82612c9a565b9050602081019050919050565b82818337600083830152505050565b60006132bc6132b784613269565b61324e565b9050828152602081018484840111156132d8576132d76131e9565b5b6132e384828561329a565b509392505050565b600082601f830112613300576132ff612f01565b5b81356133108482602086016132a9565b91505092915050565b6000806000806080858703121561333357613332612aa4565b5b600061334187828801612bb2565b945050602061335287828801612bb2565b935050604061336387828801612d27565b925050606085013567ffffffffffffffff81111561338457613383612aa9565b5b613390878288016132eb565b91505092959194509250565b600080600080600080600060c0888a0312156133bb576133ba612aa4565b5b60006133c98a828b01612bb2565b97505060206133da8a828b01612d27565b965050604088013567ffffffffffffffff8111156133fb576133fa612aa9565b5b6134078a828b01613078565b9550955050606061341a8a828b01612d27565b935050608061342b8a828b01613194565b92505060a061343c8a828b01612d27565b91505092959891949750929550565b6000806040838503121561346257613461612aa4565b5b600061347085828601612bb2565b925050602061348185828601612bb2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806134d257607f821691505b602082108114156134e6576134e561348b565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613548602183612c56565b9150613553826134ec565b604082019050919050565b600060208201905081810360008301526135778161353b565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b60006135da603d83612c56565b91506135e58261357e565b604082019050919050565b60006020820190508181036000830152613609816135cd565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b600061366c602d83612c56565b915061367782613610565b604082019050919050565b6000602082019050818103600083015261369b8161365f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006136dc82612d06565b91506136e783612d06565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156137205761371f6136a2565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061376582612d06565b915061377083612d06565b9250826137805761377f61372b565b5b828204905092915050565b7f4631000000000000000000000000000000000000000000000000000000000000600082015250565b60006137c1600283612c56565b91506137cc8261378b565b602082019050919050565b600060208201905081810360008301526137f0816137b4565b9050919050565b60008151905061380681612b9b565b92915050565b60006020828403121561382257613821612aa4565b5b6000613830848285016137f7565b91505092915050565b7f4632000000000000000000000000000000000000000000000000000000000000600082015250565b600061386f600283612c56565b915061387a82613839565b602082019050919050565b6000602082019050818103600083015261389e81613862565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b60006138db601883612c56565b91506138e6826138a5565b602082019050919050565b6000602082019050818103600083015261390a816138ce565b9050919050565b600061391c82612d06565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561394f5761394e6136a2565b5b600182019050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006139b6602983612c56565b91506139c18261395a565b604082019050919050565b600060208201905081810360008301526139e5816139a9565b9050919050565b60008160601b9050919050565b6000613a04826139ec565b9050919050565b6000613a16826139f9565b9050919050565b613a2e613a2982612b89565b613a0b565b82525050565b6000819050919050565b613a4f613a4a82612d06565b613a34565b82525050565b6000613a618285613a1d565b601482019150613a718284613a3e565b6020820191508190509392505050565b7f4633000000000000000000000000000000000000000000000000000000000000600082015250565b6000613ab7600283612c56565b9150613ac282613a81565b602082019050919050565b60006020820190508181036000830152613ae681613aaa565b9050919050565b600081905092915050565b6000613b0382612c4b565b613b0d8185613aed565b9350613b1d818560208601612c67565b80840191505092915050565b6000613b358285613af8565b9150613b418284613af8565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ba9602683612c56565b9150613bb482613b4d565b604082019050919050565b60006020820190508181036000830152613bd881613b9c565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c15602083612c56565b9150613c2082613bdf565b602082019050919050565b60006020820190508181036000830152613c4481613c08565b9050919050565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b6000613ca7602a83612c56565b9150613cb282613c4b565b604082019050919050565b60006020820190508181036000830152613cd681613c9a565b9050919050565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b6000613d13601983612c56565b9150613d1e82613cdd565b602082019050919050565b60006020820190508181036000830152613d4281613d06565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000613da5602583612c56565b9150613db082613d49565b604082019050919050565b60006020820190508181036000830152613dd481613d98565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e37602483612c56565b9150613e4282613ddb565b604082019050919050565b60006020820190508181036000830152613e6681613e2a565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613ea3601f83612c56565b9150613eae82613e6d565b602082019050919050565b60006020820190508181036000830152613ed281613e96565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613f0f601983612c56565b9150613f1a82613ed9565b602082019050919050565b60006020820190508181036000830152613f3e81613f02565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613fa1603283612c56565b9150613fac82613f45565b604082019050919050565b60006020820190508181036000830152613fd081613f94565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b600061402d82614006565b6140378185614011565b9350614047818560208601612c67565b61405081612c9a565b840191505092915050565b60006080820190506140706000830187612d69565b61407d6020830186612d69565b61408a6040830185612ec9565b818103606083015261409c8184614022565b905095945050505050565b6000815190506140b681612ada565b92915050565b6000602082840312156140d2576140d1612aa4565b5b60006140e0848285016140a7565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061411f602083612c56565b915061412a826140e9565b602082019050919050565b6000602082019050818103600083015261414e81614112565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061418b601c83612c56565b915061419682614155565b602082019050919050565b600060208201905081810360008301526141ba8161417e565b905091905056fea2646970667358221220ec8ddbf9e5cd1bcbe61593d04f49f141f05ed6c266d2f102f10f8c0b265226d864736f6c634300080900330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000e66616b74737472656e642e636f6d000000000000000000000000000000000000