`
huorongbj
  • 浏览: 19645 次
文章分类
社区版块
存档分类
最新评论

分布式系统关注点——想通关「限流」?只要这一篇

阅读更多

如果这是第二次看到我的文章,欢迎在文末扫码订阅我哟~

本文长度为2869字,建议阅读8分钟。

 

 

可能你在网上看过不少「限流」相关的文章,但是z哥的这篇可能是最全面,最深入浅出的一篇了(容我飘几秒~)。

开个玩笑,希望你能收获一些增量价值就好~。

 

 

之前有了解到z哥的一部分读者们没有充分搞清楚「限流」和「熔断」的关系。我们先来思考一个问题,生活中也有限流,为什么国庆春节长假热门景点要限流?而不是一早先开几小时,如果人多了就关几小时,人少了就再开呢?其实这就是限流和熔断表象上的一个区别。

 

在上一篇中我们聊到了「熔断」(分布式系统关注点——99%的人都能看懂的「熔断」以及最佳实践),有熔断机制的系统,它对可用性的作用至少保证了不会全盘崩溃。

 

但是你可以想象一个稍微极端一点的场景,如果系统流量不是很稳定,导致频繁触发熔断的话,是不是意味着系统一直熔断的三种状态中不断切换。

 

▲点击图片可查看大图

 

导致的结果是每次从开启熔断到关闭熔断的期间,必然会导致大量的用户无法正常使用。系统层面的可用性大致是这样的。

 

 

另外,从资源利用率上也会很容易发现,波谷的这段时期资源是未充分利用的。

 

由此可见,光有熔断是远远不够的。

 

在高压下,只要系统没宕机,如果能将接收的流量持续保持在高位,但又不超过系统所能承载的上限,会是更有效率的运作模式,因为会将这里的波谷填满。

 

 

在如今的互联网已经作为社会基础设施的大环境下,上面的这个场景其实离我们并不是那么远,同时也会显得没那么极端。例如,层出不穷的营销玩法,一个接着一个的社会热点,以及互联网冰山之下的黑产、刷子的蓬勃发展,更加使得这个场景变的那么的需要去考虑、去顾忌。因为随时都有可能会涌入超出你预期的流量,然后压垮你的系统。

 

那么限流的作用就很显而易见了:只要系统没宕机,系统只是因为资源不够,而无法应对大量的请求,为了保证有限的系统资源能够提供最大化的服务能力,因而对系统按照预设的规则进行流量(输出或输入)限制的一种方法,确保被接收的流量不会超过系统所能承载的上限。

 

 

一、怎么做「限流」

从前面聊到的内容中我们也知道,限流最好能“限”在一个系统处理能力的上限附近,所以:

  1. 通过「压力测试」等方式获得系统的能力上限在哪个水平是第一步。

  2. 其次,就是制定干预流量的策略。比如标准该怎么定、是否只注重结果还是也要注重过程的平滑性等。

  3. 最后,就是处理“被干预掉”的流量。能不能直接丢弃?不能的话该如何处理?

 

获得系统能力的上限

第一步不是我们这次内容的重点,说起来就是对系统做一轮压测。可以在一个独立的环境进行,也可以直接在生产环境的多个节点中选择一个节点作为样本来压测,当然需要做好与其他节点的隔离。

 

一般我们做压测为了获得2个结果,「速率」和「并发数」。前者表示在一个时间单位内能够处理的请求数量,比如xxx次请求/秒。后者表示系统在同一时刻能处理的最大请求数量,比如xxx次的并发。从指标上需要获得「最大值」、「平均值」或者「中位数」。后续限流策略需要设定的具体标准数值就是从这些指标中来的。

 

题外话:从精益求精的角度来说,其他的诸如cpu、网络带宽以及内存的耗用也可以作为参照因素。

 

制定干预流量的策略

常用的策略就4种,我给它起了一个简单的定义——「两窗两桶」。两窗就是:固定窗口、滑动窗口,两桶就是:漏桶、令牌桶。

 

固定窗口

 

固定窗口就是定义一个“固定”的统计周期,比如1分钟或者30秒、10秒这样。然后在每个周期统计当前周期中被接收到的请求数量,经过计数器累加后如果达到设定的阈值就触发「流量干预」。直到进入下一个周期后,计数器清零,流量接收恢复正常状态。

 

 

这个策略最简单,写起代码来也没几行。

 

全局变量 int totalCount = 0;  //有一个「固定周期」会触发的定时器将数值清零。

 

if(totalCount > 限流阈值) {

    return; //不继续处理请求。

}

totalCount++;

    

// do something...

 

 

固定窗口有一点需要注意的是,假如请求的进入非常集中,那么所设定的「限流阈值」等同于你需要承受的最大并发数。所以,如果需要顾忌到并发问题,那么这里的「固定周期」设定的要尽可能的短。因为,这样的话「限流阈值」的数值就可以相应的减小。甚至,限流阈值就可以直接用并发数来指定。比如,假设固定周期是3秒,那么这里的阈值就可以设定为「平均并发数*3」。

 

不过不管怎么设定,固定窗口永远存在的缺点是:由于流量的进入往往都不是一个恒定的值,所以一旦流量进入速度有所波动,要么计数器会被提前计满,导致这个周期内剩下时间段的请求被“限制”。要么就是计数器计不满,也就是「限流阈值」设定的过大,导致资源无法充分利用

 

「滑动窗口」可以改善这个问题。

 

滑动窗口

 

滑动窗口其实就是对固定窗口做了进一步的细分,将原先的粒度切的更细,比如1分钟的固定窗口切分为60个1秒的滑动窗口。然后统计的时间范围随着时间的推移同步后移。

 

 

同时,我们还可以得出一个结论是:如果固定窗口的「固定周期」已经很小了,那么使用滑动窗口的意义也就没有了。举个例子,现在的固定窗口周期已经是1秒了,再切分到毫秒级别能反而得不偿失,会带来巨大的性能和资源损耗。

 

滑动窗口大致的代码逻辑是这样:

 

全局数组 链表[]  counterList = new 链表[切分的滑动窗口数量];

//有一个定时器,在每一次统计时间段起点需要变化的时候就将索引0位置的元素移除,并在末端追加一个新元素。

 

int sum = counterList.Sum();

if(sum > 限流阈值) {

    return; //不继续处理请求。

}

 

int 当前索引 = 当前时间的秒数 % 切分的滑动窗口数量;

counterList[当前索引]++;

 

// do something...

 

虽然说滑动窗口可以改善这个问题,但是本质上还是预先划定时间片的方式,属于一种“预测”,意味着几乎肯定无法做到100%的物尽其用。

 

 

但是,「桶」模式可以做的更好,因为「桶」模式中多了一个缓冲区(桶本身)。

 

漏桶

 

首先聊聊「漏桶」吧。漏桶模式的核心是固定“出口”的速率,不管进来多少量,出去的速率一直是这么多。如果涌入的量多到桶都装不下了,那么就进行「流量干预」。

 

 

整个实现过程我们来分解一下。

  1. 控制流出的速率。这个其实可以使用前面提到的两个“窗口”的思路来实现。如果当前速率小于阈值则直接处理请求,否则不直接处理请求,进入缓冲区,并增加当前水位。

  2. 缓冲的实现可以做一个短暂的休眠或者记录到一个容器中再做异步的重试。

  3. 最后控制桶中的水位不超过最大水位。这个很简单,就是一个全局计数器,进行加加减减。

 

这样一来,你会发现本质就是:通过一个缓冲区将不平滑的流量“整形”成平滑的(高于均值的流量暂存下来补足到低于均值的时期),以此最大化计算处理资源的利用率

 

 

实现代码的简化表示如下:

 

全局变量 int unitSpeed;  //出口当前的流出速率。每隔一个速率计算周期(比如1秒)会触发定时器将数值清零。

全局变量 int waterLevel; //当前缓冲区的水位线。

 

if(unitSpeed < 速率阈值) {

    unitSpeed++;

    

    //do something...

}

else{

    if(waterLevel > 水位阈值){

        return; //不继续处理请求。

    }

    

    waterLevel++;

    

    while(unitSpeed >= 速率阈值){

        sleep(一小段时间)。

    }

    unitSpeed++;

    waterLevel--;

        

    //do something...

}

 

更优秀的「漏桶」策略已经可以在流量的总量充足的情况下发挥你所预期的100%处理能力,但这还不是极致。

 

你应该知道,一个程序所在的运行环境中,往往不单单只有这个程序本身,会存在一些系统进程甚至是其它的用户进程。也就是说,程序本身的处理能力是会被干扰的,是会变化的。所以,你可以预估某一个阶段内的平均值、中位数,但无法预估具体某一个时刻的程序处理能力。又因此,你必然会使用相对悲观的标准去作为阈值,防止程序超负荷。

 

 

那么从资源利用率来说,有没有更优秀的方案呢?有,这就是「令牌桶」。

 

令牌桶

 

令牌桶模式的核心是固定“进口”速率。先拿到令牌,再处理请求,拿不到令牌就被「流量干预」。因此,当大量的流量进入时,只要令牌的生成速度大于等于请求被处理的速度,那么此刻的程序处理能力就是极限

 

 

也来分解一下它的实现过程。

  1. 控制令牌生成的速率,并放入桶中。这个其实就是单独一个线程在不断的生成令牌。

  2. 控制桶中待领取的令牌水位不超过最大水位。这个和「漏桶」一样,就是一个全局计数器,进行加加减减。

 

大致的代码简化表示如下(看上去像「固定窗口」的反向逻辑):

 

全局变量 int tokenCount = 令牌数阈值; //可用令牌数。有一个独立的线程用固定的频率增加这个数值,但不大于「令牌数阈值」。

 

if(tokenCount == 0){

    return; //不继续处理请求。

}

 

tokenCount--;

 

//do something...

 

聪明的你可能也会想到,这样一来令牌桶的容量大小理论上就是程序需要支撑的最大并发数。的确如此,假设同一时刻进入的流量将令牌取完,但是程序来不及处理,将会导致事故发生。

 

所以,没有真正完美的策略,只有合适的策略。因此,根据不同的场景能够识别什么是最合适的策略是更需要锻炼的能力。下面z哥分享一些我个人的经验。

 

 

二、做「限流」的最佳实践

四种策略该如何选择?

首先,固定窗口。一般来说,如非时间紧迫,不建议选择这个方案,太过生硬。但是,为了能快速止损眼前的问题可以作为临时应急的方案。

 

其次,滑动窗口。这个方案适用于对异常结果「高容忍」的场景,毕竟相比“两窗”少了一个缓冲区。但是,胜在实现简单。

 

然后,漏桶。z哥觉得这个方案最适合作为一个通用方案。虽说资源的利用率上不是极致,但是「宽进严出」的思路在保护系统的同时还留有一些余地,使得它的适用场景更广。

 

最后,令牌桶。当你需要尽可能的压榨程序的性能此时桶的最大容量必然会大于等于程序的最大并发能力),并且所处的场景流量进入波动不是很大(不至于一瞬间取完令牌,压垮后端系统)。

 

分布式系统中带来的新挑战

一个成熟的分布式系统大致是这样的。

 

 

每一个上游系统都可以理解为是其下游系统的客户端。然后我们回想一下前面的内容,可能你发现了,前面聊的「限流」都没有提到到底是在客户端做限流还是服务端做,甚至看起来更倾向是建立在服务端的基础上做。但是你知道,在一个分布式系统中,一个服务端本身就可能存在多个副本,并且还会提供给多个客户端调用,甚至其自身也会作为客户端角色。那么,在如此交错复杂的一个环境中,该如何下手做限流呢?我的思路是通过「一纵一横」来考量。

 

 

都知道「限流」是一个保护措施,那么可以将它想象成一个盾牌。另外,一个请求在系统中的处理过程是链式的。那么,正如古时候军队打仗一样,盾牌兵除了有小部分在老大周围保护,剩下的全在最前线。因为盾的位置越前,能受益的范围越大

 

分布式系统中最前面的是什么?接入层。如果你的系统有接入层,比如用nginx做的反向代理。那么可以通过它的ngx_http_limit_conn_module以及ngx_http_limit_req_module来做限流,是很成熟的一个解决方案。

 

如果没有接入层,那么只能在应用层以AOP的思路去做了。但是,由于应用是分散的,出于成本考虑你需要针对性的去做限流。比如ToC的应用必然比ToB的应用更需要做,高频的缓存系统必然比低频的报表系统更需要做,Web应用由于存在Filter的机制做起来必然比Service应用更方便。

 

那么应用间的限流到底是做到客户端还是服务端呢?

 

z哥的观点是,从效果上客户端模式肯定是优于服务端模式的,因为当处于被限流状态的时候,客户端模式连建立连接的动作都省了。另一个潜在的好处是,与集中式的服务端模式相比,可以把少数的服务端程序的压力分散掉。但是在客户端做成本也更高,因为它是去中心化的,假如需要多个节点之间的数据共通的话,是一个很麻烦的事情。

 

所以,最终z哥建议你:如果考虑成本就服务端模式,考虑效果就客户端模式。当然也不是绝对,比如一个服务端的流量大部分都来源于某一个客户端,那么就可以直接在这个客户端做限流,这也不失为一个好方案。

 

数据库层面的话,一般连接字符串中本身就会包含「最大连接数」的概念,就可以起到限流的作用。如果想做更精细的控制就只能做到统一封装的数据库访问层框架中了。

 

聊完了「纵」,那么「横」是什么呢?

 

不管是多个客户端,还是同一个服务端的多个副本。每个节点的性能必然会存在差异,如何设立合适的阈值?以及如何让策略的变更尽可能快的在集群中的多个节点生效?说起来很简单,引入一个性能监控平台和配置中心。但这些真真要做好不容易,后续我们再展开这块内容。

 

 

三、总结

限流就好比保险丝,根据你制定的标准,达到了就拉闸。

 

不过,触发限流后的措施除了直接丢弃请求之外,还有一个方式是「降级」,那么降级有哪些方式呢?我们下一篇再聊吧。

 

 

 

Question:

你在工作中有遇到过什么场景需要做「限流」吗?欢迎分享交流一下

 

 


 

相关文章:

  


 

 

▶ 关于作者:张帆(Zachary,个人微信号:Zachary-ZF)。坚持用心打磨每一篇高质量原创。本文首发于公众号:「跨界架构师(ID:Zachary_ZF)。 如果你是初级程序员,想提升但不知道如何下手。又或者做程序员多年,陷入了一些瓶颈想拓宽一下视野。欢迎关注我的公众号「跨界架构师」,回复「技术」,送你一份我长期收集和整理的思维导图。 如果你是运营,面对不断变化的市场束手无策。又或者想了解主流的运营策略,以丰富自己的“仓库”。欢迎关注我的公众号「跨界架构师」,回复「运营」,送你一份我长期收集和整理的思维导图。
<!--5f39ae17-8c62-4a45-bc43-b32064c9388a:W3siYmxvY2tJZCI6IjQ2MTgtMTU0NDQwNTUyOTE5MSIsImJsb2NrVHlwZSI6InBhcmFncmFwaCIsInN0eWxlcyI6eyJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsInRleHQtaW5kZW50IjowLCJsaW5lLWhlaWdodCI6MS43NSwiYmFjay1jb2xvciI6IiIsInBhZGRpbmciOiIifSwidHlwZSI6InBhcmFncmFwaCIsInJpY2hUZXh0Ijp7ImRhdGEiOlt7ImNoYXIiOiLilrYiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoiICIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLlhbMiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5LqOIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuS9nCIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLogIUiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi77yaIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuW8oCIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLluIYiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi77yIIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IloiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoiYSIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiJjIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6ImgiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoiYSIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiJyIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6InkiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi77yMIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuS4qiIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLkuroiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5b6uIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuS/oSIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLlj7ciLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi77yaIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IloiLCJzdHlsZXMiOnsiYm9sZCI6dHJ1ZSwiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoiYSIsInN0eWxlcyI6eyJib2xkIjp0cnVlLCJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiJjIiwic3R5bGVzIjp7ImJvbGQiOnRydWUsImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6ImgiLCJzdHlsZXMiOnsiYm9sZCI6dHJ1ZSwiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoiYSIsInN0eWxlcyI6eyJib2xkIjp0cnVlLCJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiJyIiwic3R5bGVzIjp7ImJvbGQiOnRydWUsImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6InkiLCJzdHlsZXMiOnsiYm9sZCI6dHJ1ZSwiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoiLSIsInN0eWxlcyI6eyJib2xkIjp0cnVlLCJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiJaIiwic3R5bGVzIjp7ImJvbGQiOnRydWUsImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IkYiLCJzdHlsZXMiOnsiYm9sZCI6dHJ1ZSwiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi77yJIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuOAgiIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLlnZoiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5oyBIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IueUqCIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLlv4MiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5omTIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuejqCIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLmr48iLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5LiAIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuevhyIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLpq5giLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi6LSoIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IumHjyIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLljp8iLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5YibIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuOAgiIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLmnKwiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5paHIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IummliIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLlj5EiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5LqOIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuWFrCIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLkvJciLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5Y+3Iiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6Iu+8miIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLjgIwiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi6LeoIiwic3R5bGVzIjp7ImJvbGQiOnRydWUsImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIiwiaHJlZiI6Imh0dHA6Ly9saW5rLnpoaWh1LmNvbS8/dGFyZ2V0PWh0dHBzJTNBLy9tcC53ZWl4aW4ucXEuY29tL3MvTXk1WWYycEJkTU5Xd1RfeXl3aG9mQSJ9fSx7ImNoYXIiOiLnlYwiLCJzdHlsZXMiOnsiYm9sZCI6dHJ1ZSwiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYiLCJocmVmIjoiaHR0cDovL2xpbmsuemhpaHUuY29tLz90YXJnZXQ9aHR0cHMlM0EvL21wLndlaXhpbi5xcS5jb20vcy9NeTVZZjJwQmRNTld3VF95eXdob2ZBIn19LHsiY2hhciI6IuaetiIsInN0eWxlcyI6eyJib2xkIjp0cnVlLCJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiIsImhyZWYiOiJodHRwOi8vbGluay56aGlodS5jb20vP3RhcmdldD1odHRwcyUzQS8vbXAud2VpeGluLnFxLmNvbS9zL015NVlmMnBCZE1OV3dUX3l5d2hvZkEifX0seyJjaGFyIjoi5p6EIiwic3R5bGVzIjp7ImJvbGQiOnRydWUsImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIiwiaHJlZiI6Imh0dHA6Ly9saW5rLnpoaWh1LmNvbS8/dGFyZ2V0PWh0dHBzJTNBLy9tcC53ZWl4aW4ucXEuY29tL3MvTXk1WWYycEJkTU5Xd1RfeXl3aG9mQSJ9fSx7ImNoYXIiOiLluIgiLCJzdHlsZXMiOnsiYm9sZCI6dHJ1ZSwiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYiLCJocmVmIjoiaHR0cDovL2xpbmsuemhpaHUuY29tLz90YXJnZXQ9aHR0cHMlM0EvL21wLndlaXhpbi5xcS5jb20vcy9NeTVZZjJwQmRNTld3VF95eXdob2ZBIn19LHsiY2hhciI6IuOAjSIsInN0eWxlcyI6eyJib2xkIjp0cnVlLCJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLvvIgiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoiSSIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiJEIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6Iu+8miIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiJaIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6ImEiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoiYyIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiJoIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6ImEiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoiciIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiJ5Iiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6Il8iLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoiWiIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiJGIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6Iu+8iSIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLjgIIiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoiXG4iLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoiXG4iLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5aaCIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuaenCIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLkvaAiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5pivIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuWInSIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLnuqciLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi56iLIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuW6jyIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLlkZgiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi77yMIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuaDsyIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLmj5AiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5Y2HIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuS9hiIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLkuI0iLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi55+lIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IumBkyIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLlpoIiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5L2VIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuS4iyIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLmiYsiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi44CCIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuWPiCIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLmiJYiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi6ICFIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuWBmiIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLnqIsiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5bqPIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuWRmCIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLlpJoiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5bm0Iiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6Iu+8jCIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLpmbciLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5YWlIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuS6hiIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLkuIAiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5LqbIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IueTtiIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLpoogiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5oOzIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuaLkyIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLlrr0iLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5LiAIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuS4iyIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLop4YiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi6YeOIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuOAgiIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLmrKIiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi6L+OIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuWFsyIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLms6giLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5oiRIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IueahCIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLlhawiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5LyXIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuWPtyIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLjgIwiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi6LeoIiwic3R5bGVzIjp7ImJvbGQiOnRydWUsImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIiwiaHJlZiI6Imh0dHA6Ly9saW5rLnpoaWh1LmNvbS8/dGFyZ2V0PWh0dHBzJTNBLy9tcC53ZWl4aW4ucXEuY29tL3MvTXk1WWYycEJkTU5Xd1RfeXl3aG9mQSJ9fSx7ImNoYXIiOiLnlYwiLCJzdHlsZXMiOnsiYm9sZCI6dHJ1ZSwiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYiLCJocmVmIjoiaHR0cDovL2xpbmsuemhpaHUuY29tLz90YXJnZXQ9aHR0cHMlM0EvL21wLndlaXhpbi5xcS5jb20vcy9NeTVZZjJwQmRNTld3VF95eXdob2ZBIn19LHsiY2hhciI6IuaetiIsInN0eWxlcyI6eyJib2xkIjp0cnVlLCJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiIsImhyZWYiOiJodHRwOi8vbGluay56aGlodS5jb20vP3RhcmdldD1odHRwcyUzQS8vbXAud2VpeGluLnFxLmNvbS9zL015NVlmMnBCZE1OV3dUX3l5d2hvZkEifX0seyJjaGFyIjoi5p6EIiwic3R5bGVzIjp7ImJvbGQiOnRydWUsImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIiwiaHJlZiI6Imh0dHA6Ly9saW5rLnpoaWh1LmNvbS8/dGFyZ2V0PWh0dHBzJTNBLy9tcC53ZWl4aW4ucXEuY29tL3MvTXk1WWYycEJkTU5Xd1RfeXl3aG9mQSJ9fSx7ImNoYXIiOiLluIgiLCJzdHlsZXMiOnsiYm9sZCI6dHJ1ZSwiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYiLCJocmVmIjoiaHR0cDovL2xpbmsuemhpaHUuY29tLz90YXJnZXQ9aHR0cHMlM0EvL21wLndlaXhpbi5xcS5jb20vcy9NeTVZZjJwQmRNTld3VF95eXdob2ZBIn19LHsiY2hhciI6IuOAjSIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLvvIwiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5ZueIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuWkjSIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLjgIwiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5oqAIiwic3R5bGVzIjp7ImJvbGQiOnRydWUsImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuacryIsInN0eWxlcyI6eyJib2xkIjp0cnVlLCJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLjgI0iLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi77yMIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IumAgSIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLkvaAiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5LiAIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuS7vSIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLmiJEiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi6ZW/Iiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuacnyIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLmlLYiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi6ZuGIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuWSjCIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLmlbQiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi55CGIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IueahCIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLmgJ0iLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi57u0Iiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuWvvCIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLlm74iLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi44CCIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IlxuIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IlxuIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuWmgiIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLmnpwiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5L2gIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuaYryIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLov5AiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi6JClIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6Iu+8jCIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLpnaIiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5a+5Iiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuS4jSIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLmlq0iLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5Y+YIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuWMliIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLnmoQiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5biCIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuWcuiIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLmnZ8iLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5omLIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuaXoCIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLnrZYiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi44CCIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuWPiCIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLmiJYiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi6ICFIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuaDsyIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLkuoYiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi6KejIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuS4uyIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLmtYEiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi55qEIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6Iui/kCIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLokKUiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi562WIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IueVpSIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLvvIwiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5LulIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuS4sCIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLlr4wiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi6IeqIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuW3sSIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLnmoQiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi4oCcIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuS7kyIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLlupMiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi4oCdIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuOAgiIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLmrKIiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi6L+OIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuWFsyIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLms6giLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5oiRIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IueahCIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLlhawiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5LyXIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuWPtyIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLjgIwiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi6LeoIiwic3R5bGVzIjp7ImJvbGQiOnRydWUsImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIiwiaHJlZiI6Imh0dHA6Ly9saW5rLnpoaWh1LmNvbS8/dGFyZ2V0PWh0dHBzJTNBLy9tcC53ZWl4aW4ucXEuY29tL3MvTXk1WWYycEJkTU5Xd1RfeXl3aG9mQSJ9fSx7ImNoYXIiOiLnlYwiLCJzdHlsZXMiOnsiYm9sZCI6dHJ1ZSwiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYiLCJocmVmIjoiaHR0cDovL2xpbmsuemhpaHUuY29tLz90YXJnZXQ9aHR0cHMlM0EvL21wLndlaXhpbi5xcS5jb20vcy9NeTVZZjJwQmRNTld3VF95eXdob2ZBIn19LHsiY2hhciI6IuaetiIsInN0eWxlcyI6eyJib2xkIjp0cnVlLCJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiIsImhyZWYiOiJodHRwOi8vbGluay56aGlodS5jb20vP3RhcmdldD1odHRwcyUzQS8vbXAud2VpeGluLnFxLmNvbS9zL015NVlmMnBCZE1OV3dUX3l5d2hvZkEifX0seyJjaGFyIjoi5p6EIiwic3R5bGVzIjp7ImJvbGQiOnRydWUsImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIiwiaHJlZiI6Imh0dHA6Ly9saW5rLnpoaWh1LmNvbS8/dGFyZ2V0PWh0dHBzJTNBLy9tcC53ZWl4aW4ucXEuY29tL3MvTXk1WWYycEJkTU5Xd1RfeXl3aG9mQSJ9fSx7ImNoYXIiOiLluIgiLCJzdHlsZXMiOnsiYm9sZCI6dHJ1ZSwiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYiLCJocmVmIjoiaHR0cDovL2xpbmsuemhpaHUuY29tLz90YXJnZXQ9aHR0cHMlM0EvL21wLndlaXhpbi5xcS5jb20vcy9NeTVZZjJwQmRNTld3VF95eXdob2ZBIn19LHsiY2hhciI6IuOAjSIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLvvIwiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5ZueIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuWkjSIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLjgIwiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi6L+QIiwic3R5bGVzIjp7ImJvbGQiOnRydWUsImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuiQpSIsInN0eWxlcyI6eyJib2xkIjp0cnVlLCJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLjgI0iLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi77yMIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IumAgSIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLkvaAiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi5LiAIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuS7vSIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLmiJEiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi6ZW/Iiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuacnyIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLmlLYiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi6ZuGIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuWSjCIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLmlbQiLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi55CGIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IueahCIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLmgJ0iLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi57u0Iiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19LHsiY2hhciI6IuWvvCIsInN0eWxlcyI6eyJmb250LXNpemUiOjE2LCJjb2xvciI6IiMzOTM5MzkiLCJiYWNrLWNvbG9yIjoiI2ZmZmZmZiJ9fSx7ImNoYXIiOiLlm74iLCJzdHlsZXMiOnsiZm9udC1zaXplIjoxNiwiY29sb3IiOiIjMzkzOTM5IiwiYmFjay1jb2xvciI6IiNmZmZmZmYifX0seyJjaGFyIjoi44CCIiwic3R5bGVzIjp7ImZvbnQtc2l6ZSI6MTYsImNvbG9yIjoiIzM5MzkzOSIsImJhY2stY29sb3IiOiIjZmZmZmZmIn19XSwiaXNSaWNoVGV4dCI6dHJ1ZSwia2VlcExpbmVCcmVhayI6dHJ1ZX19XQ==-->定期发表原创内容:架构设计丨分布式系统丨产品丨运营丨一些深度思考
扫码加入小圈子 ↓

 

分享到:
评论

相关推荐

    系统架构师32小时通关资料.zip

    《系统架构师32小时通关资料》是一份专为备考系统架构设计师的考生精心准备的学习资源。这份资料可能没有书签目录,使得直接查找特定主题稍显不便,但整体内容结构清晰,涵盖了系统架构设计的核心知识点。尽管由于是...

    系统架构师-一次性通关资料

    《系统架构师-一次性通关资料》是一套专为准备参加国家软考系统架构设计师考试的学员精心准备的复习材料。该资源集包含了丰富的知识体系,旨在帮助考生全面掌握考试所需的各项技能,确保一次性通过考试。以下是对这...

    论文研究-基于广义随机Petri网的口岸通关流程建模与仿真——以洋山保税港区进口法检货物的通关流程为例.pdf

    论文研究-基于广义随机Petri网的口岸通关流程建模与仿真——以洋山保税港区进口法检货物的通关流程为例.pdf, 口岸通关是国际多式联运体系的必要环节, 其通关速度对国际...

    韩国通关号免费查询系统,韩国清关码校验

    今天给大家带来的是韩国通关码反查纠错系统于2022年9月26日的升级内容介绍。 第一,系统以浏览器插件的形式呈现,后期将会一同发布网站系统。 第二,系统再次启用了批量通关码信息校验的功能,我们的老用户可能并...

    信息系统项目考试32小时通关--正文.pdf

    信息系统项目考试32小时通关--正文

    信息系统项目管理师考试32小时通关

    信息系统项目管理师考试32小时通关 项目经理软考资料,2022最新整理,32小时快速通关,自己手动整理,2022年上半年项目经理考试资料 项目经理软考资料,2022最新整理,32小时快速通关,自己手动整理,2022年上半年...

    新考纲-系统架构设计师(软考高级) 一站式通关课程(2024版)

    一、什么是软考 软考,全称计算机技术与软件专业技术资格(水平)考试,是一项由国家人力资源和社会保障部(原人事部)、工业和信息化部(原信息产业部)领导的国家级考试。该考试的目的是对全国计算机与软件专业...

    系统架构设计师32小时通关1

    【系统架构设计师】是软件开发领域中的核心角色,他们承担着设计和规划复杂软件系统架构的任务,确保系统在技术上可行、高效,并满足业务需求。系统架构设计师不仅要具备深厚的技术底蕴,还需拥有良好的管理和协调...

    精讲通关——讲义合集.pdf

    【建设工程管理的内涵和任务】 建设工程管理是针对工程项目从规划、设计、施工到运营维护全过程的综合...对于从事建筑行业的专业人士来说,理解并掌握这些知识点是至关重要的,因为它们直接影响到工程项目的成功与否。

    海关通关管理信息系统实用.pdf

    海关通关管理信息系统H2000是海关信息化建设的关键项目,旨在构建全国集中的业务数据库,统一存储各地海关...这一系统的发展和应用,反映了现代信息技术在公共服务领域的重要作用,为海关监管提供了强大的技术支持。

    软考必备-系统集成项目管理工程师考试32小时通关.rar

    《系统集成项目管理工程师考试32小时通关指南》是一份为准备软考——全国计算机技术与软件专业技术资格(水平)考试中的系统集成项目管理工程师这一科目精心编纂的备考资料。该资料集全面覆盖了项目管理的核心知识...

    海关通关管理系统信息系统.doc

    “从上到下”的策略和方法强调由全面到局部,从长远到近期,由上到下,从探索、研制一种合理的信息流的模型出发,设计出适合于这种信息流的信息系统。 H2000 系统是海关通关管理信息系统的一部分,是海关对进出口...

    系统架构设计师考试32小时通关.pdf

    系统架构设计师考试32小时通关.pdf。该书2018年出版,作者:薛大龙,李海龙,吴芳茜,邹月平,黄俊玲 著。51CTO学院的书。考系统架构设计师的可以拿去参考

    系统集成项目管理工程师考试32小时通关.rar

    《系统集成项目管理工程师考试32小时通关》是针对IT专业人士的一份重要参考资料,它旨在帮助备考者在有限的时间内高效地掌握系统集成项目管理的关键知识。这份PDF文档集成了全面的学习材料,覆盖了考试所需的各个...

    信息系统项目管理师考试32小时通关电子版

    《信息系统项目管理师考试32小时通关》是一本专为准备参加软考信息系统项目管理师考试的考生量身定制的复习资料。该书涵盖了计算机考试的核心内容,旨在帮助IT人员,尤其是软件开发人员和项目经理更好地理解和掌握...

    数据结构期末通关——栈与队列PPT

    在本课程中,我们将重点关注两种基本的数据结构:栈和队列,它们是许多复杂算法和程序设计的基础。 栈是一种被称为“后进先出”(LIFO,Last In First Out)的数据结构。它的操作主要包括压栈(Push)和弹栈(Pop)...

    高项32小时通关.pdf

    下面详细介绍与标题《高项32小时通关.pdf》和描述“内容丰富,信息系统项目管理师秘诀,信息系统项目管理师32小时通关”以及标签“信息系统项目管理师 32小时通关 信息系统项目管理资料 高项 软考”相关的知识点。...

    《信息系统项目管理师考试32小时通关》 高清电子版

    《信息系统项目管理师考试32小时通关》高清电子版是一本专门为准备参加软考信息系统项目管理师考试的考生量身定制的学习资料。该书涵盖了计算机考试的重要知识点,旨在帮助IT人员,尤其是那些专注于软件开发和担任...

    系统集成项目管理工程师考试32小时通关-正文-薛大龙博士.zip

    《系统集成项目管理工程师考试32小时通关-正文-薛大龙博士》是针对准备参加“系统集成项目管理工程师”这一中级职称考试的考生而设计的一套高效学习资料。薛大龙博士作为该领域的专家,他的教程往往深入浅出,能够...

Global site tag (gtag.js) - Google Analytics