HTTP Live Streaming (HLS) 协议凭借其稳定性和兼容性,已成为视频点播和直播领域的行业标准。其核心机制是将媒体内容切分成独立的 TS (Transport Stream) 文件,并通过一个 M3U8 索引文件(即播放列表)来组织和引导播放器顺序请求。
然而,随着优质视频内容的价值日益凸显,版权保护与访问控制成为了业务成功的关键。HLS 标准内置了 AES-128 加密机制,它能对每个 TS 切片进行加密,从而有效防止未经授权的下载和分发。
我们可以通过对比 M3U8 文件直观地理解这一机制:
bash 体验AI代码助手 代码解读复制代码#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:3
#EXTINF:3,
video_segment_01.ts
#EXTINF:3,
video_segment_02.ts
less 体验AI代码助手 代码解读复制代码#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:3
#EXT-X-KEY:METHOD=AES-128,URI="https://your-cdn.com/keys/enc.key",IV=...
#EXTINF:3,
encrypted_segment_01.ts
#EXT-X-KEY:METHOD=AES-128,URI="https://your-cdn.com/keys/enc.key",IV=...
#EXTINF:3,
encrypted_segment_02.ts
可以看到,加密后的 M3U8 文件中增加了 #EXT-X-KEY 标签,它明确指向了用于解密的密钥 enc.key 的位置。播放器必须先获取此密钥,才能解密并播放视频切片。因此,对密钥的访问控制,等同于对媒体内容的访问控制。
Amazon Elemental MediaConvert 是一项强大的视频转码服务,可以轻松地将源文件(如 MP4)转码为加密的 HLS 格式。然而,MediaConvert 生成的 M3U8 文件中,密钥的 URL 是静态的、写死的。
这对需要精细化用户权限管理的场景构成了挑战:我们如何确保只有付费用户或特定会员才能获取到解密密钥?传统的做法是在密钥服务器前置一个应用后端,但这增加了架构复杂度和潜在的性能瓶颈。
为了解决这一挑战,我们提出一个高效、可扩展的无服务器架构。其核心思想是:利用 CDN 边缘计算能力,在用户请求 M3U8 文件时,动态地将其中的密钥 URL 重写,附加一个有时效性的、代表用户身份的凭证(Token) 。
https://cdn.example.com/video/playlist.m3u8?token=USER_SPECIFIC_TOKENtoken。token 附加到 #EXT-X-KEY 标签的 URI 属性上。https://cdn.example.com/keys/enc.key?token=USER_SPECIFIC_TOKEN。当播放器请求此 URL 时,我们可以在 CloudFront 部署另一个 Lambda@Edge 或 CloudFront Function,用于验证token的有效性,从而决定是否返回密钥。首先,我们需要生成一个 16 字节(128位)的 AES 密钥,并将其上传至 S3,通过 CloudFront 对外提供服务。
perl 体验AI代码助手 代码解读复制代码# 1. 生成16字节的随机二进制密钥
openssl rand 16 > enc.key
# 2. 将密钥转换为16进制字符串,供 MediaConvert 配置使用
xxd -p enc.key
# 输出示例: 1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d
将 enc.key 文件上传至 S3,并记录其 CloudFront URL,例如 https://d12345.cloudfront.net/enc.key。
在 MediaConvert 的转码作业配置中,找到输出组设置,启用加密,并填入上一步获取的信息。
AES_128Static Keyxxd 命令生成的 32 位十六进制字符串。这是实现动态授权的核心。以下 Python 代码示例实现了 M3U8 文件的动态重写。
python 体验AI代码助手 代码解读复制代码# Lambda@Edge for M3U8 Rewriting
import re
def lambda_handler(event, context):
request = event['Records'][0]['cf']['request']
response = event['Records'][0]['cf']['response']
# 1. 确保是M3U8文件的响应
content_type = response.get('headers', {}).get('content-type', [{}])[0].get('value', '')
if 'application/vnd.apple.mpegurl' not in content_type:
return response
# 2. 从请求的查询参数中提取token
query_string = request.get('querystring', '')
token = None
if 'token=' in query_string:
params = dict(p.split('=') for p in query_string.split('&'))
token = params.get('token')
if not token:
return response
# 3. 读取原始M3U8内容并重写
try:
original_body = response.get('body')
# 使用正则表达式将token附加到所有密钥URI上
def add_token_to_uri(match):
uri = match.group(1)
separator = '&' if '?' in uri else '?'
return f'URI="{uri}{separator}token={token}"'
modified_body = re.sub(r'URI="([^"]+)"', add_token_to_uri, original_body)
response['body'] = modified_body
response['headers']['content-length'] = [{'key': 'Content-Length', 'value': str(len(modified_body))}]
return response
except Exception as e:
# 异常处理,返回原始响应
print(f"Error processing M3U8: {e}")
return response
将此函数打包并部署到 Lambda,然后在 CloudFront 分发的 “源响应” 行为中关联此函数。
完成部署后,使用带有 token 参数的 M3U8 URL 在 Safari 或其他支持 HLS 的播放器中进行测试。通过浏览器的开发者工具,您将观察到播放器请求的密钥 URL 已经成功附加了 token。
本文介绍的方案,通过结合 Amazon Elemental MediaConvert 的强大转码能力和 Lambda@Edge 的边缘计算灵活性,构建了一个安全、可扩展且成本优化的媒体内容保护系统。它不仅实现了标准的 HLS 加密,更重要的是解决了动态用户权限校验的难题。对于需要更高级别保护的场景,还可以进一步集成更复杂的 DRM(数字版权管理)解决方案。
以上就是本文的全部内容啦。最后提醒一下各位工友,如果后续不再使用相关服务,别忘了在控制台关闭,避免超出免费额度产生费用~
https://infogram.com/untitled-1h0r6rzwyo93w4e
https://infogram.com/untitled-1h9j6q759ol1v4g
https://infogram.com/untitled-1h0r6rzwyo7ew4e
https://infogram.com/microsoft-office-word-2007-docx-1h7v4pd0lv1r84k
https://infogram.com/untitled-1hxj48mqg09zq2v
https://infogram.com/untitled-1h9j6q759on3v4g
https://infogram.com/untitled-1h984wv15wyqz2p
https://infogram.com/untitled-1h0r6rzwyo1vw4e
https://infogram.com/untitled-1h0n25opq079z4p
https://infogram.com/untitled-1h7v4pd0lvg084k
https://infogram.com/untitled-1h0n25opq07el4p
https://infogram.com/untitled-1hnq41op8yvop23
https://infogram.com/untitled-1hnp27eqd08ky4g
https://infogram.com/untitled-1h1749wqz058l2z
https://infogram.com/untitled-1h1749wqz058l2z
https://infogram.com/9862pdf-1h7v4pd0lvoq84k
https://infogram.com/9862pdf-1h984wv15w9kd2p
https://infogram.com/9862pdf-1h9j6q759qv7v4g
https://infogram.com/untitled-1hnq41op8jk9p23
https://infogram.com/9862pdf-1hxj48mqgj5152v
https://infogram.com/9862pdf-1h0n25opqj80z4p
https://infogram.com/9862pdf-1h7v4pd0lqn584k
https://infogram.com/9862pdf-1hnp27eqdj3yn4g
https://infogram.com/9862pdf-1h984wv15g3md2p
https://infogram.com/9862pdf-1h1749wqzjvlq2z
https://infogram.com/9862pdf-1h0n25opqjyyl4p
https://infogram.com/9862pdf-1h7v4pd0lqw9j4k
https://infogram.com/9862pdf-1hxj48mqgjpr52v
https://infogram.com/9862pdf-1h0r6rzwyqpkw4e
https://infogram.com/9862pdf-1h1749wqzjv0l2z
https://infogram.com/9862pdf-1hnp27eqdjm7n4g
https://infogram.com/9862pdf-1h0r6rzwyqpjl4e
https://infogram.com/9862pdf-1h0n25opqjool4p
https://infogram.com/9862pdf-1hxj48mqgjmn52v
https://infogram.com/9862pdf-1h1749wqzjwjl2z
https://infogram.com/9862pdf-1h9j6q759q7e54g
https://infogram.com/9862pdf-1h984wv15gved2p
https://infogram.com/9862pdf-1h0n25opqjkkl4p
https://infogram.com/9862pdf-1h9j6q759q0pv4g
https://infogram.com/9862pdf-1hnp27eqdjkxy4g
https://infogram.com/9862pdf-1h1749wqmgz1q2z
https://infogram.com/9862pdf-1hnp27eqyrd9y4g
https://infogram.com/9862pdf-1h984wv1drd3z2p
https://infogram.com/9862pdf-1hmr6g8jzrz8z2n
https://infogram.com/9862pdf-1h9j6q75kekj54g
https://infogram.com/9862pdf-1h7v4pd08y8x84k
https://infogram.com/9862pdf-1hxj48mqedewq2v
https://infogram.com/9862pdf-1hmr6g8jzrzno2n
https://infogram.com/9862pdf-1h1749wqmgmgq2z
https://infogram.com/9862pdf-1h984wv1drkoz2p
https://infogram.com/9862pdf-1h0n25oplv1zz4p
https://infogram.com/9862pdf-1h9j6q75kelx54g
https://infogram.com/9862pdf-1hnq41opzer1k23
https://infogram.com/9862pdf-1hxj48mqedlqq2v
https://infogram.com/9862pdf-1hmr6g8jzrvro2n
https://infogram.com/9862pdf-1h0n25oplv1ll4p
https://infogram.com/9862pdf-1h9j6q75kelnv4g
https://infogram.com/9862pdf-1hnq41opzervp23
https://infogram.com/9862pdf-1hnp27eqyr7wy4g
https://infogram.com/9862pdf-1h984wv1drmvz2p
https://infogram.com/9862pdf-1hmr6g8jzr0wz2n
https://infogram.com/9862pdf-1h0n25oplvndz4p
https://infogram.com/9862pdf-1hxj48mqed90q2v
https://infogram.com/9862pdf-1h984wv1drmgd2p
https://infogram.com/9862pdf-1h0r6rzw5m7ml4e
https://infogram.com/9862pdf-1h1749wqmgymq2z
https://infogram.com/9862pdf-1h9j6q75kenzv4g
https://infogram.com/9862pdf-1hnq41opzed7p23
https://infogram.com/9862pdf-1hnp27eqyr93y4g
https://infogram.com/9862pdf-1h984wv1dryjz2p
https://infogram.com/9862pdf-1hmr6g8jzr51z2n
https://infogram.com/9862pdf-1h1749wqmgenl2z
https://infogram.com/9862pdf-1h9j6q75kez854g
https://infogram.com/9862pdf-1h7v4pd08ygk84k
https://infogram.com/9862pdf-1hxj48mqedyjq2v
https://infogram.com/9862pdf-1h984wv1dry7d2p
https://infogram.com/9862pdf-1h0n25oplv7nl4p
https://infogram.com/9862pdf-1hnq41opzevkp23
https://infogram.com/9862pdf-1hxj48mqedk352v
https://infogram.com/9862pdf-1h0r6rzw5mn5l4e
https://infogram.com/9862pdf-1h1749wqmg5yq2z
https://infogram.com/9862pdf-1h9j6q75ke13v4g
https://infogram.com/9862pdf-1hnq41opze70p23
https://infogram.com/9862pdf-1h0r6rzw5mjvw4e
https://infogram.com/9862pdf-1h0n25oplv59z4p
https://infogram.com/9862pdf-1hnq41opze7jk23
https://infogram.com/9862pdf-1hnp27eqyrwgn4g
https://infogram.com/9862pdf-1hxj48mqedxdq2v
https://infogram.com/9862pdf-1h0r6rzw5mj9l4e
https://infogram.com/9862pdf-1h7v4pd08lnwj4k
https://infogram.com/9862pdf-1hnq41opz8kop23
https://infogram.com/9862pdf-1hnp27eqyd3ky4g
https://infogram.com/9862pdf-1hxj48mqeg5o52v
https://infogram.com/9862pdf-1h984wv1d53zz2p
https://infogram.com/9862pdf-1hmr6g8jzxdyz2n
https://infogram.com/9862pdf-1h1749wqmzl8l2z
https://infogram.com/9862pdf-1h7v4pd08lnv84k
https://infogram.com/9862pdf-1hxj48mqeg5gq2v
https://infogram.com/9862pdf-1hmr6g8jzxd5o2n
https://infogram.com/9862pdf-1h0n25oplq85l4p
https://infogram.com/9862pdf-1hnq41opz805p23
https://infogram.com/9862pdf-1hxj48mqegpv52v
https://infogram.com/9862pdf-1h0r6rzw5yp8w4e
https://infogram.com/9862pdf-1hmr6g8jzx7lz2n
https://infogram.com/9862pdf-1h9j6q75k9go54g
https://infogram.com/9862pdf-1hnq41opz80ek23
https://infogram.com/9862pdf-1hnp27eqydmdn4g
https://infogram.com/9862pdf-1hxj48mqegpeq2v
https://infogram.com/9862pdf-1h0n25oplqo8l4p
https://infogram.com/9862pdf-1h9j6q75k955v4g
https://infogram.com/9862pdf-1h0n25oplqp5z4p
https://infogram.com/9862pdf-1h7v4pd08lvw84k
https://infogram.com/9862pdf-1hnp27eqyd05n4g
https://infogram.com/9862pdf-1h984wv1d5wzd2p
https://infogram.com/9862pdf-1h0r6rzw5yo8l4e
https://infogram.com/9862pdf-1h1749wqmz08q2z
https://infogram.com/9862pdf-1hnq41opz8ymp23
https://infogram.com/9862pdf-1h1749wqmz0pl2z
https://infogram.com/9862pdf-1h7v4pd08lqd84k
https://infogram.com/9862pdf-1h0n25oplqvjl4p
https://infogram.com/9862pdf-1h984wv1d5rez2p
https://infogram.com/9862pdf-1h1749wqmzzwl2z
https://infogram.com/9862pdf-1h0n25oplqqkz4p
https://infogram.com/9862pdf-1hnq41opz88qk23
https://infogram.com/9862pdf-1h984wv1d558d2p
https://infogram.com/9862pdf-1h0n25oplqqrl4p
https://infogram.com/9862pdf-1hnp27eqyddly4g
https://infogram.com/9862pdf-1h9j6q75k9kp54g
https://infogram.com/9862pdf-1hnq41opz8zxk23
https://infogram.com/9862pdf-1h0r6rzw5y9pw4e
https://infogram.com/9862pdf-1h0n25oplq13z4p
https://infogram.com/9862pdf-1hxj48mqeglwq2v
https://infogram.com/9862pdf-1hmr6g8jzxvno2n
https://infogram.com/9862pdf-1h7v4pd08l71j4k
https://infogram.com/9862pdf-1h984wv1d5moz2p
https://infogram.com/9862pdf-1h9j6q75k9nx54g
https://infogram.com/9862pdf-1hnp27eqydlvn4g
https://infogram.com/9862pdf-1h984wv1d5mwd2p
https://infogram.com/9862pdf-1h0r6rzw5y7dl4e
https://infogram.com/9862pdf-1hmr6g8jzx5xo2n
https://infogram.com/9862pdf-1h0n25oplq71l4p
https://infogram.com/9862pdf-1hnp27eqyd83y4g
https://infogram.com/9862pdf-1h1749wqmz5nl2z
https://infogram.com/9862pdf-1h9j6q75k91854g
https://infogram.com/9862pdf-1h0r6rzw5ynyl4e
https://infogram.com/9862pdf-1h9j6q75k911v4g
https://infogram.com/9862pdf-1hnq41opz87kp23
https://infogram.com/9862pdf-1hmr6g8jzxpoz2n
https://infogram.com/9862pdf-1hxj48mqegxzq2v
https://infogram.com/9862pdf-1h9j6q75kk5dv4g
https://infogram.com/9862pdf-1hnp27eqyy0kn4g
https://infogram.com/9862pdf-1hmr6g8jzzmyo2n
https://infogram.com/9862pdf-1hnq41opzzyjp23
https://infogram.com/9862pdf-1h1749wqmm05l2z
https://infogram.com/9862pdf-1hnq41opzzj5k23
https://infogram.com/9862pdf-1h0r6rzw55q8l4e
https://infogram.com/9862pdf-1h1749wqmmj8q2z
https://infogram.com/9862pdf-1h0r6rzw55q7w4e
https://infogram.com/9862pdf-1hnp27eqyygon4g
https://infogram.com/9862pdf-1h0r6rzw55d1w4e
https://infogram.com/9862pdf-1h9j6q75kke754g
https://infogram.com/9862pdf-1h0r6rzw55mkl4e
https://infogram.com/9862pdf-1h0n25opllv0l4p
https://infogram.com/9862pdf-1h7v4pd088yyj4k
https://infogram.com/9862pdf-1h1749wqmmzvl2z
https://infogram.com/9862pdf-1h7v4pd088l984k
https://infogram.com/9862pdf-1hxj48mqeegrq2v
https://infogram.com/9862pdf-1hmr6g8jzzxjo2n
https://infogram.com/9862pdf-1hnp27eqyyd7y4g
https://infogram.com/9862pdf-1h984wv1dykxd2p
https://infogram.com/9862pdf-1hnp27eqy97yy4g
https://infogram.com/9862pdf-1hnq41opzgdnk23
https://infogram.com/9862pdf-1h984wv1dymnd2p
https://infogram.com/9862pdf-1h0n25opl7njl4p
https://infogram.com/9862pdf-1hnp27eqy9l7y4g
https://infogram.com/9862pdf-1h984wv1dymez2p
https://infogram.com/9862pdf-1hmr6g8jz55dz2n
https://infogram.com/9862pdf-1h984wv1dyy8d2p
https://infogram.com/9862pdf-1h9j6q75kzz9v4g
https://infogram.com/9862pdf-1h9j6q75kz1kv4g
https://infogram.com/9862pdf-1hmr6g8jz5p8z2n
https://infogram.com/9862pdf-1h9j6q75kz3j54g
https://infogram.com/9862pdf-1h984wv1dy91d2p
https://infogram.com/9862pdf-1hmr6g8jz5pno2n
https://infogram.com/9862pdf-1h0n25opl75ql4p
https://infogram.com/9862pdf-1h984wv1de3oz2p
https://infogram.com/9862pdf-1h0n25ople8zz4p
https://infogram.com/9862pdf-1hxj48mqek5qq2v
https://infogram.com/9862pdf-1h0n25ople8ll4p
https://infogram.com/9862pdf-1h0n25opley1l4p
https://infogram.com/9862pdf-1hnp27eqy8e3y4g
https://infogram.com/9862pdf-1h0r6rzw5nz3w4e
https://infogram.com/9862pdf-1h0n25opleoxz4p
https://infogram.com/9862pdf-1hnq41opzvopk23
https://infogram.com/9862pdf-1h984wv1dev7d2p
https://infogram.com/9862pdf-1h9j6q75k171v4g
https://infogram.com/9862pdf-1h984wv1dej0z2p
https://infogram.com/9862pdf-1h7v4pd08z3r84k
https://infogram.com/9862pdf-1h984wv1dejrd2p
https://infogram.com/9862pdf-1hmr6g8jzqw0o2n
https://infogram.com/9862pdf-1hnq41opzv3op23
https://infogram.com/9862pdf-1hnp27eqy8oky4g
https://infogram.com/9862pdf-1h984wv1deqzz2p
https://infogram.com/9862pdf-1h0r6rzw5nexw4e
https://infogram.com/9862pdf-1h7v4pd08zpv84k
https://infogram.com/9862pdf-1hmr6g8jzq15o2n
https://infogram.com/9862pdf-1h1749wqm5o5q2z
https://infogram.com/9862pdf-1h0n25ople35l4p
https://infogram.com/9862pdf-1h984wv1dezpz2p
https://infogram.com/9862pdf-1hnq41opzvnek23
https://infogram.com/9862pdf-1h984wv1dezkd2p
https://infogram.com/9862pdf-1h1749wqm53pq2z
https://infogram.com/9862pdf-1h7v4pd08zx3j4k
https://infogram.com/9862pdf-1hnp27eqy8zoy4g
https://infogram.com/9862pdf-1h0r6rzw5nxrw4e
https://infogram.com/9862pdf-1hnq41opzvq8k23
https://infogram.com/9862pdf-1h0r6rzw5nxnl4e
https://infogram.com/9862pdf-1h7v4pd08zm9j4k
https://infogram.com/9862pdf-1hnp27eqy8xny4g
https://infogram.com/9862pdf-1h1749wqm57vq2z
https://infogram.com/9862pdf-1hnp27eqy81zy4g
https://infogram.com/9862pdf-1h9j6q75k18e54g
https://infogram.com/9862pdf-1hnp27eqy81ln4g
https://infogram.com/9862pdf-1h1749wqm58wq2z
https://infogram.com/9862pdf-1h7v4pd08zkjj4k
https://infogram.com/9862pdf-1hmr6g8jzq9mz2n
https://infogram.com/9862pdf-1h9j6q75k1w954g
https://infogram.com/9862pdf-1hnq41opzv1dk23
https://infogram.com/9862pdf-1hxj48mqek8kq2v
https://infogram.com/9862pdf-1h0n25oplewml4p
https://infogram.com/9862pdf-1h7v4pd08zrxj4k
https://infogram.com/9862pdf-1h0r6rzw5ngow4e
https://infogram.com/9862pdf-1h0n25oplewqz4p
https://infogram.com/9862pdf-1hnq41opzvwgk23
https://infogram.com/9862pdf-1hnp27eqy8v8n4g
https://infogram.com/9862pdf-1h0n25oplep3l4p
https://infogram.com/9862pdf-1h7v4pd08z0mj4k
https://infogram.com/9862pdf-1hxj48mqekqq52v
https://infogram.com/9862pdf-1h0r6rzw5nwqw4e
https://infogram.com/9862pdf-1h0r6rzw5no0l4e
https://infogram.com/9862pdf-1hnq41opzvy1p23
https://infogram.com/9862pdf-1h0r6rzw5nodw4e
https://infogram.com/9862pdf-1h0n25ople01z4p
https://infogram.com/9862pdf-1h9j6q75k1on54g
https://infogram.com/9862pdf-1hnq41opzvy7k23
https://infogram.com/9862pdf-1h984wv1degvd2p
https://infogram.com/9862pdf-1h1749wqm5j3q2z
https://infogram.com/9862pdf-1h7v4pd08zqkj4k
https://infogram.com/9862pdf-1h984wv1deg7z2p
https://infogram.com/9862pdf-1h0n25oplejnz4p
https://infogram.com/9862pdf-1hnp27eqy8gmn4g
https://infogram.com/9862pdf-1hmr6g8jzqnoo2n
https://infogram.com/9862pdf-1h0n25oplerxl4p
https://infogram.com/9862pdf-1hnq41opzvmpp23
https://infogram.com/9862pdf-1h0r6rzw5ndyw4e
https://infogram.com/9862pdf-1h9j6q75k1r154g
https://infogram.com/9862pdf-1h0n25oplevgl4p
https://infogram.com/9862pdf-1h9j6q75k1edv4g
https://infogram.com/9862pdf-1h7v4pd08zy0j4k
https://infogram.com/9862pdf-1hmr6g8jzqrvz2n
https://infogram.com/9862pdf-1hnp27eqy8dkn4g
https://infogram.com/9862pdf-1hxj48mqekg7q2v
https://infogram.com/9862pdf-1h1749wqm5z7q2z
https://infogram.com/9862pdf-1hnp27eqy8dgy4g
https://infogram.com/9862pdf-1hxj48mqekgg52v
https://infogram.com/9862pdf-1h984wv1de5dz2p
https://infogram.com/9862pdf-1h1749wqm5z5l2z
https://infogram.com/9862pdf-1h7v4pd08z8w84k
https://infogram.com/9862pdf-1h0r6rzw5n58l4e
https://infogram.com/9862pdf-1h1749wqm5mpl2z
https://infogram.com/9862pdf-1h9j6q75k1lg54g
https://infogram.com/9862pdf-1hnp27eqy87on4g
https://infogram.com/9862pdf-1hxj48mqeklvq2v
https://infogram.com/9862pdf-1hmr6g8jzqv9o2n
https://infogram.com/9862pdf-1h0n25ople1pl4p
https://infogram.com/9862pdf-1h9j6q75k1lqv4g
https://infogram.com/9862pdf-1h7v4pd08z75j4k
https://infogram.com/9862pdf-1hxj48mqekll52v
https://infogram.com/9862pdf-1h984wv1dekmz2p
https://infogram.com/9862pdf-1h0n25ople5vl4p
https://infogram.com/9862pdf-1hnq41opzv7dp23
https://infogram.com/9862pdf-1hnp27eqy8w9y4g
https://infogram.com/9862pdf-1h1749wqmplxl2z
https://infogram.com/9862pdf-1h9j6q75k3vj54g
https://infogram.com/9862pdf-1hnq41opz7klk23
https://infogram.com/9862pdf-1hxj48mqex5wq2v
https://infogram.com/9862pdf-1h984wv1d931d2p
https://infogram.com/9862pdf-1hmr6g8jzpdno2n
https://infogram.com/9862pdf-1h9j6q75k3vlv4g
https://infogram.com/9862pdf-1h984wv1d9ooz2p
https://infogram.com/9862pdf-1h0n25opl5yzz4p
https://infogram.com/9862pdf-1h7v4pd08owm84k
https://infogram.com/9862pdf-1hxj48mqexpqq2v
https://infogram.com/9862pdf-1h0r6rzw5jpdl4e
https://infogram.com/9862pdf-1h0n25opl5yll4p
https://infogram.com/9862pdf-1hnq41opz70vp23
https://infogram.com/9862pdf-1h1749wqmpw3l2z
https://infogram.com/9862pdf-1hnq41opz7owk23
https://infogram.com/9862pdf-1h984wv1d9vgd2p
https://infogram.com/9862pdf-1hnp27eqywk0n4g
https://infogram.com/9862pdf-1hmr6g8jzpezo2n
https://infogram.com/9862pdf-1h0n25opl5knl4p
https://infogram.com/9862pdf-1hnq41opz79kp23
https://infogram.com/9862pdf-1h0r6rzw5j3ew4e
https://infogram.com/9862pdf-1h7v4pd08o9r84k
https://infogram.com/9862pdf-1h984wv1d90rd2p
https://infogram.com/9862pdf-1h9j6q75k3y3v4g
https://infogram.com/9862pdf-1h7v4pd08opnj4k
https://infogram.com/9862pdf-1hxj48mqexo752v
https://infogram.com/9862pdf-1h984wv1d9q5d2p
https://infogram.com/9862pdf-1hmr6g8jzp10o2n
https://infogram.com/9862pdf-1hnp27eqywnky4g
https://infogram.com/9862pdf-1h1749wqmp38l2z
https://infogram.com/9862pdf-1h7v4pd08ojv84k
https://infogram.com/9862pdf-1hnq41opz7nmk23
https://infogram.com/9862pdf-1h984wv1d9zdd2p
https://infogram.com/9862pdf-1h0n25opl5z5l4p