Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PWA 품은 안드로이드 웹뷰 성능 개선기
Search
Jinny You
April 05, 2019
Programming
0
960
PWA 품은 안드로이드 웹뷰 성능 개선기
2019 드로이드 나이츠(Droid Knights)에서 발표한 자료입니다.
Jinny You
April 05, 2019
Tweet
Share
More Decks by Jinny You
See All by Jinny You
Integrating WebGPU In Browser with ThorVG
tinyjin
0
8
인디 앱 개발자와 Flutter
tinyjin
0
140
모던 웹 기술로 C++ 렌더링 엔진 테스트 자동화하기
tinyjin
0
13
그래픽 엔진 포팅 사례로 배우는 웹어셈블리 웹 컴포넌트 개발부터 디버깅, 최적화까지
tinyjin
0
100
韩国的打卡地:你喜欢海边吗?
tinyjin
0
20
LottieFiles로 시작하는 빠르고 효율적인 애니메이션 핸드오프
tinyjin
0
42
エンジニアが見つめるLottieアニメーション
tinyjin
0
54
ThorVG's Lottie Model in Action
tinyjin
0
140
국민대학교 사제동행 세미나
tinyjin
0
240
Other Decks in Programming
See All in Programming
【Kaigi on Rails 2024】YOUTRUST スポンサーLT
krpk1900
1
310
開発効率向上のためのリファクタリングの一歩目の選択肢 ~コード分割~ / JJUG CCC 2024 Fall
ryounasso
0
430
What’s New in Compose Multiplatform - A Live Tour (droidcon London 2024)
zsmb
1
450
PHP でアセンブリ言語のように書く技術
memory1994
PRO
1
160
Dev ContainersとGitHub Codespacesの素敵な関係
ymd65536
1
140
外部システム連携先が10を超えるシステムでのアーキテクチャ設計・実装事例
kiwasaki
1
280
GitHub Actionsのキャッシュと手を挙げることの大切さとそれに必要なこと
satoshi256kbyte
5
420
プロジェクト新規参入者のリードタイム短縮の観点から見る、品質の高いコードとアーキテクチャを保つメリット
d_endo
1
1.1k
推し活としてのrails new/oshikatsu_ha_iizo
sakahukamaki
3
2k
RailsのPull requestsのレビューの時に私が考えていること
yahonda
5
2.8k
AWS Lambdaから始まった Serverlessの「熱」とキャリアパス / It started with AWS Lambda Serverless “fever” and career path
seike460
PRO
0
170
Amazon Bedrock Agentsを用いてアプリ開発してみた!
har1101
0
300
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
325
24k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
33k
A designer walks into a library…
pauljervisheath
202
24k
Optimizing for Happiness
mojombo
376
69k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
109
49k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
27
4.2k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
GraphQLとの向き合い方2022年版
quramy
43
13k
Speed Design
sergeychernyshev
24
600
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
27
2k
Transcript
18"ಿ উ٘۽٘ਢ࠭ࢿמѐࢶӝ 4QFBLFS ߅ࢳ ਬ
ӝࣗѐ ߅ࢳ ޖо҅ࣘߓҊरউ٘۽٘ѐߊ ਬ ࢜۽Ѧदب೧ࠁҊरਢѐߊ !NJOTFPLLS !UJOZKJO JBNNJOTFPLQBSL!HNBJMDPN CBSBN!HNBJMDPN
֬ৈ࢚ട बܻ࢚ݫन ۽झ
बܻ࢚ݫन ۽झ ֎ झఋসੑפ ֬ৈ࢚ട
֬ৈ࢚ട ӏݽসؘ ೠػܻࣗझ טযաח୭ജ҃ইצҊёٜ࠙ ೧৻ࢎਊ וܽੋఠ֔
ӒۢীبࠛҳೞҊજࢲ࠺झ҃ਸઁҕೞҊर ֬ৈ࢚ട ӏݽসؘ ೠػܻࣗझ טযաח୭ജ҃ইצҊёٜ࠙ ೧৻ࢎਊ וܽੋఠ֔
ӒۢীبࠛҳೞҊજࢲ࠺झ҃ਸઁҕೞҊर ֬ৈ࢚ട ӏݽসؘ ೠػܻࣗझ טযաח୭ജ҃ইצҊёٜ࠙ ೧৻ࢎਊ וܽੋఠ֔
ࢲ࠺झীࠄѺਵ۽ ਢਸ֍যࠁ
ӒۢীبࠛҳೞҊજࢲ࠺झ҃ਸઁҕೞҊर ֬ৈ࢚ട ӏݽসؘ ೠػܻࣗझ טযաח୭ജ҃ইצҊёٜ࠙ ೧৻ࢎਊ וܽੋఠ֔ ࢲ࠺झীࠄѺਵ۽
ਢਸ֍যࠁ ખܲ
֬ৈ࢚ട
ޤ উ٘۽٘ஶಌ۠झীਢਸоҊ৳Ҋ Ӓ۞פө
ޤ উ٘۽٘ஶಌ۠झীਢਸоҊ৳Ҋ Ӓ۞פө উबೞࣁਃ উ٘۽٘҃ҕਬੑפ
ܻח৵18"ܳोחо 18"ܳࢶఖೞӝөৈj
ܻח৵18"ܳोחо ਢࢎਊ҃ਸѐࢶೞӝਤೠ ৈ۞ݧӝࣿ 18"ӝמ நद ਢಹए Ѿઁ
കചݶীࢸ
ܻח৵18"ܳोחо 4FSWJDF8PSLFSח 18"ӝࣿѐߊਸب৬ח࠳ۄ"QJ
ܻח৵18"ܳोחо ਢ࠭ܳࢎਊೞחজ ו۷؍ࣘبj ࣘبܳࡅܰѱೞӝਤ೧ࢲח tநदu t٘झܻu t443u t"1*୭ചu
ܻࢶఖ நदઙܨীחযڃѱ ਢநद 18"நद 18"ۄҊ࢜۽աৡਢӝࣿ؍ؘযڃѢ ਢநदࠁ؊աਵ۰ա
ܻח৵18"ܳोחо ਢநदחযڌѱزೞחо $BDIF$POUSPM &5BH ݅ܐदрӝ߈ ٣ణޙӝ߈
ܻח৵18"ܳोחо $BDIF$POUSPM நदоਬؼӝрदр ݅ܐदрӝ߈
ܻח৵18"ܳोחо $BDIF$POUSPM நदоਬؼӝрदр ࢜۽ܻࣗझо৬ب ݅ܐदрӝ߈
ܻח৵18"ܳोחо $BDIF$POUSPM நदоਬؼӝрदр ࢜۽ܻࣗझо৬ب दрաӝөח ܻࣗझসؘоࠛоמ ݅ܐदрӝ߈
ܻח৵18"ܳोחо &5BH ۽ஸ <fsa88sad8v> ࢲߡ <9asd8f7v8a> == ٣ణޙӝ߈
ܻח৵18"ܳोחо &5BH ۽ஸ <fsa88sad8v> ࢲߡ <9asd8f7v8a> == ٣ణޙӝ߈ ۽ஸҗࢲߡীח ٣ణޙਸ࠺ҮѨࢎೞӝਤ೧
֎ਕాनࣻ
ܻח৵18"ܳोחо &5BH ۽ஸ <fsa88sad8v> ࢲߡ <9asd8f7v8a> == ٣ణޙӝ߈ ۽ஸҗࢲߡীח ٣ణޙਸ࠺ҮѨࢎೞӝਤ೧
֎ਕాनࣻ ֎ਕాन߽ݾਸ೧Ѿೡࣻহ
ܻח৵18"ܳोחо 18"நदחযڌѱزೞחо நदܳসؘೞӝਤ೧ࢲח ਃೡٸߡ٘ܳ߄Բӝ݅ೞݶؽ ਬോदрਸഝਊೠܻࣗझসؘ ֎ਕ߽ݾਵ۽ੋೠו۰ߊࢤೞঋ ݒ۽٘द݃நदসؘदب ܻࣗझসؘदઁযоݒਬ۽ 4FSWJDF8PSLFS
ߡ٘ӝ߈
ܻח৵18"ܳोחо 4UBMF8IJMF3FWBMJEBUF
ܻח৵18"ܳोחо 18"நदחযڌѱزೞחо நदܳসؘೞӝਤ೧ࢲח ਃೡٸߡ٘ܳ߄Բӝ݅ೞݶؽ ਬോदрਸഝਊೠܻࣗझসؘ ֎ਕ߽ݾਵ۽ੋೠו۰ߊࢤೞঋ ݒ۽٘द݃நदসؘदب ܻࣗझসؘदઁযоݒਬ۽ 4FSWJDF8PSLFS
ߡ٘ӝ߈
ܻח৵18"ܳोחо 18"நदחযڌѱزೞחо நदܳসؘೞӝਤ೧ࢲח ਃೡٸߡ٘ܳ߄Բӝ݅ೞݶؽ ਬോदрਸഝਊೠܻࣗझসؘ ֎ਕ߽ݾਵ۽ੋೠו۰ߊࢤೞঋ ݒ۽٘द݃நदসؘदب ܻࣗझসؘदઁযоݒਬ۽ 4FSWJDF8PSLFS
ߡ٘ӝ߈
ܻח৵18"ܳोחо ܻࣗझসؘदਬ۽ݶࢲب ֎ਕ߽ݾহחҙܻоמೠநदܳਤ೧ 18"நदܳࢶఖ
18"ۆ 18"ীࢲਗೞחநद ܻநद 1SF$BDIF ۄநद 3PVUF$BDIF ࢶDBDIFറMPBE ࢶMPBEറDBDIF ۽٘ೞחܻࣗझੌۄب ۽٬ࣘبоݒࡅܴ
ױ ୡӝজप೯द ࣘبо࢚ਵ۽ו۰ࣻ ۽٘ೞחܻࣗझח ܻநदࠁࣘبоוܿ ױ ୡӝজप೯द ࢿמೞоѢহ
ӒѾҗ #FGPSF ܻࣗझ۽٬өѦܽदр T
ӒѾҗ "GUFS ܻࣗझ۽٬өѦܽदр NT
ӒѾҗ #FGPSF"GUFS T NT ড 7~8ߓ ର!!!
18"ܳऔҊࡅܰѱ݅٘חߑߨ 8PSL#PY۽ষрױೞѱ 18"ਢਸٜ݅ࣻ (PPHMF8PSL#PYۄ࠳۞ܻ 18"ܳऔѱҳഅೡࣻח18"ಁః ױ٘۽ 18"߂18"நदܳҳഅ
18"҃ ࢎդ೮؍উ٘۽٘҃
18"҃ ݾח
ݾח ಕ ಕ যڃജ҃ٚ ಕо֎౭࠳ۢ ࡅܰѱࠁৈ दр ࡅܴ ࡅܴ
18"জߓನҗীࢲ؍ࢎѤٜ
ߣ૩҃tੌ߈ਢҗחܰu
18"҃ t18"ۄӒۗ u tӒېبjҳӖҊjਢפөjੜٜ݅ѷju tӝࠄࣁਵ۽׳ܽu ੌ߈ਢҗחܰ
18"҃ पಁ ੌױ18"ޥঌইࠁӝ۽ೣ t18"ۄӒۗ u tӒېبjҳӖҊjਢפөjੜٜ݅ѷju tӝࠄࣁਵ۽׳ܽu ੌ߈ਢҗחܰ
18"҃ ࠳ۄ࢚ҙহݽٚࢎਊীѱ ੌ߈ਢҗחܰ https://developers.google.com/web/fundamentals/codelabs/your-first-pwapp/?hl=ko
18"҃ ࠳ۄ࢚ҙহݽٚࢎਊীѱ য়ۄੋաוܽ֎ਕীࢲبࠗ٘۞ز ੌ߈ਢҗחܰ https://developers.google.com/web/fundamentals/codelabs/your-first-pwapp/?hl=ko
18"҃ ࠳ۄ࢚ҙহݽٚࢎਊীѱ য়ۄੋաוܽ֎ਕীࢲبࠗ٘۞ز জۢࢎਊदࠂೠࢸসࠛਃ ੌ߈ਢҗחܰ https://developers.google.com/web/fundamentals/codelabs/your-first-pwapp/?hl=ko
18"҃ ࠳ۄ࢚ҙহݽٚࢎਊীѱ য়ۄੋաוܽ֎ਕীࢲبࠗ٘۞ز জۢࢎਊदࠂೠࢸসࠛਃ ֎౭࠳জਸоמ ੌ߈ਢҗחܰ https://developers.google.com/web/fundamentals/codelabs/your-first-pwapp/?hl=ko
18"҃ ࠳ۄ࢚ҙহݽٚࢎਊীѱ য়ۄੋաוܽ֎ਕীࢲبࠗ٘۞ز জۢࢎਊदࠂೠࢸসࠛਃ ֎౭࠳জਸоמ ݽٚࢎਊীѱוܽ֎ਕীࢲب ࠗ٘۞زਸઁҕೡࣻҳա ੌ߈ਢҗחܰ https://developers.google.com/web/fundamentals/codelabs/your-first-pwapp/?hl=ko
فߣ૩҃t(JUIVCীࢲસસೞӝu
18"҃ (JUIVCীࢲસસೞӝ t৬জী18"֍ਵݶજѷ֎ tӔؘޖੜޅظࢲউغ؍Ѣ u tҙ۲ܐоয٥оѷ u (JUIVC۽׳ܽu
18"҃ पಁ t৬জী18"֍ਵݶજѷ֎ tӔؘޖੜޅظࢲউغ؍Ѣ u tҙ۲ܐоয٥оѷ u (JUIVC۽׳ܽu (JUIVCীࢲસસೞӝ
18"҃ 18"ܳউ٘۽٘ੌࠗ۽ॄࢎਊೠ҃ח٘ޛ पಁ (JUIVCীࢲસસೞӝ t৬জী18"֍ਵݶજѷ֎ tӔؘޖੜޅظࢲউغ؍Ѣ u tҙ۲ܐоয٥оѷ u
(JUIVC۽׳ܽu
18"҃ न18"8SBQQFS۽ ҳഅೠѪ (JUIVCীࢲસસೞӝ
18"҃ ޤоର न18"8SBQQFS۽ ҳഅೠѪ (JUIVCীࢲસસೞӝ
18"҃ 8FC7JFXநयߑधର ޤоର न18"8SBQQFS۽ ҳഅೠѪ (JUIVCীࢲસસೞӝ
18"҃ -0"%@$"$)&@&-4&@/&5803, -0"%@$"$)&@0/-: -0"%@%&'"6-5 -0"%@/0@$"$)& 6TFDBDIFESFTPVSDFTXIFOUIFZBSFBWBJMBCMF FWFOJGUIFZIBWFFYQJSFE %POUVTFUIFOFUXPSL MPBEGSPNUIFDBDIF
%FGBVMUDBDIFVTBHFNPEF %POUVTFUIFDBDIF MPBEGSPNUIFOFUXPSL (JUIVCীࢲસસೞӝ ޙઁ8FC7JFX$BDIFࢸ
ޙઁ8FC7JFX$BDIFߑधࢸ 18"ܳਤ೧ࢲח நद৬֎ਕܳࢎਊೞחࢸਸࢎਊ೮যঠ೮ -0"%@$"$)&@&-4&@/&5803, -0"%@$"$)&@0/-: -0"%@/0@$"$)& 6TFDBDIFESFTPVSDFTXIFOUIFZBSFBWBJMBCMF FWFOJGUIFZIBWFFYQJSFE %POUVTFUIFOFUXPSL MPBEGSPNUIFDBDIF
%POUVTFUIFDBDIF MPBEGSPNUIFOFUXPSL 18"҃ (JUIVCীࢲસસೞӝ -0"%@%&'"6-5 %FGBVMUDBDIFVTBHFNPEF
ࣁߣ૩҃tઁٚநदࢎਊೞӝu
18"҃ ઁٚநदࢎਊೞӝ tয়য়நयߑधࢸਸ߄Բפөػu tӔؘޥо࢚ೠؘ u tفߣ૩ಕࠗఠࡅܰѱڰ֎ u
दೠߣ࢚ӝೞחݾח ಕ ಕ दр ࡅܴ ࡅܴ ಕо֎౭࠳ۢ ࡅܰѱࠁৈ 18"҃
ઁٚநदࢎਊೞӝ
पಁ 18"҃ ઁٚநदࢎਊೞӝ tয়য়நयߑधࢸਸ߄Բפөػu tӔؘޥо࢚ೠؘ u tفߣ૩ಕࠗఠࡅܰѱڰ֎ u
पಁ ۚੋநयߑधਸࢎਊೡਃо 18"҃ ઁٚநएࢎਊೞӝ tয়য়நयߑधࢸਸ߄Բפөػu tӔؘޥо࢚ೠؘ u tفߣ૩ಕࠗఠࡅܰѱڰ֎ u
ӝ അप A A A A ಕо ী۽٬ೠࠗఠ۽٬হ ࡅܰѱڲ दр
दр וܿ ࡅܴ ࡅܴ ࡅܴ ಕо֎౭࠳ۢ ࡅܰѱࠁৈ 18"҃ ઁٚநएࢎਊೞӝ
וܿ ࡅܴ ࢜۽ ߉ই১ நद 18"҃ ઁٚநएࢎਊೞӝ
וܿ ࡅܴ நद 18"҃ ઁٚநएࢎਊೞӝ
18"҃ וܿ ࡅܴ ࠗఠࡅܰѱڰѱ೧۰ݶযڌѱ೧ঠೞ ઁٚநएࢎਊೞӝ
18"҃ ࡅܴ ࡅܴ খীࢲநयೞҊӒѦਊೞ ઁٚநएࢎਊೞӝ
18"҃ ࡅܴ ࡅܴ ۄ நद ܻ நद ઁٚநएࢎਊೞӝ
18"҃ A ۞ೠ நय ߑध ؋࠙ী ৈ۞ ಕۄب ࡅܰѱ
ڸযח Ѫ оמ! B C ઁٚநएࢎਊೞӝ
֎ߣ૩҃t߹بநदҙܻসu
18"҃ tநदоসؘغঋਵݶয u tӒېبநदܳઁೡࣻѱՔٜ݅ݶજਸѪэؘu tநदઁח࢚҃8FC7JFXDMFBS$BDIF j ۽উؼѪэؘ u ߹بநएҙܻস
18"҃ ઁоউؽ ߹بநएҙܻস tநदоসؘغঋਵݶয u tӒېبநदܳઁೡࣻѱՔٜ݅ݶજਸѪэؘu tநदઁח࢚҃8FC7JFXDMFBS$BDIF j ۽উؼѪэؘ
u
18"҃ েjநदߑधࢸਢ࠭ٮۄоݶࢲਢ࠭ݫࣗ٘ח৵উغ ߹بநएҙܻস ઁоউؽ tநदоসؘغঋਵݶয u tӒېبநदܳઁೡࣻѱՔٜ݅ݶજਸѪэؘu tநदઁח࢚҃8FC7JFXDMFBS$BDIF
j ۽উؼѪэؘ u
18"҃ েjநदߑधࢸਢ࠭ٮۄоݶࢲਢ࠭ݫࣗ٘ח৵উغ நदীೠ࠙ࢳਃ೮ ߹بநएҙܻস ઁоউؽ tநदоসؘغঋਵݶয u tӒېبநदܳઁೡࣻѱՔٜ݅ݶજਸѪэؘu
tநदઁח࢚҃8FC7JFXDMFBS$BDIF j ۽উؼѪэؘ u
18"҃ 8FC7JFX WebView WebKit Chrome Network Stack ߹بநएҙܻস
18"҃ 8FC7JFX WebView WebKit Chrome Network Stack Ӓ۰ח ాनೞח
ਢ࠭ ߹بநएҙܻস
18"҃ 8FC7JFX WebView WebKit Chrome Network Stack .FNPSZ$BDIF %JTL$BDIF
$PACKAGE_DIRECTORY/cache/org.chromium.android_webview ߹بநएҙܻস
18"҃ WebView WebKit Chrome Network Stack .FNPSZ$BDIF Service Worker
%JTL$BDIF $PACKAGE_DIRECTORY/cache/org.chromium.android_webview 4FSWJDF8PSLFS$BDIF 8FC7JFX 18" 4FSWJDF8PSLFS $PACKAGE_DIRECTORY/app_webview/Service Worker/CacheStorage ߹بநएҙܻস
18"҃ WebView WebKit Chrome Network Stack .FNPSZ$BDIF Service Worker
%JTL$BDIF $PACKAGE_DIRECTORY/cache/org.chromium.android_webview 4FSWJDF8PSLFS$BDIF $PACKAGE_DIRECTORY/app_webview/Service Worker/CacheStorage पઁ WebView.clearCache(…) ழߡܻ 8FC7JFX 18" 4FSWJDF8PSLFS ߹بநएҙܻস
18"҃ WebView WebKit Chrome Network Stack .FNPSZ$BDIF Service Worker
%JTL$BDIF $PACKAGE_DIRECTORY/cache/org.chromium.android_webview 4FSWJDF8PSLFS$BDIF $PACKAGE_DIRECTORY/app_webview/Service Worker/CacheStorage 18"நदઁܳਤ೧ࢶ ߹بসਃ पઁ WebView.clearCache(…) ழߡܻ 8FC7JFX 18" 4FSWJDF8PSLFS ߹بநएҙܻস
18"҃ 18"4FSWJDF8PSLFS$BDIFઁ private void removeServiceWorkerCache() { File cacheStorage =
new File(getCacheDir() + "/../app_webview/Service Worker/CacheStorage"); clearFolder(cacheStorage); } private void clearFolder(File folder) { if (folder != null) { if (folder.isDirectory()) { File files[] = folder.listFiles(); if (files != null) { for (int i = 0; i < files.length; i++) { if (files[i].delete()) { GlobalUtil.debug("app_serviceworker", files[i].getName() + “ ઁ ࢿҕ!”); } else { GlobalUtil.debug("app_serviceworker", files[i].getName() + " ઁ पಁ ƕƕ"); } } } } } } ߹بநएҙܻস
ࢽߣ૩҃tੜزೞחഛੋೞӝu
18"҃ tੜجইоחѪэؘju tে u tࢲ࠺झਕழநदоੜزೞחযڌѱঌ u ੜزೞחഛੋೞӝ
18"҃ 8FC7JFXਗѺ٣ߡӦ tੜجইоחѪэؘju tে u tࢲ࠺झਕழநदоੜزೞחযڌѱঌ u ੜزೞחഛੋೞӝ
%FCVHHFS ਢ࠭ীࢲࠁחಕܳ٣ߡӦೡࣻҊ ܻࣗझоযוࣗझীࢲৡѤഛੋоמ WebView.setWebContentsDebuggingEnabled(true);
۞ೠੌ۲ٜ҃ਸѻҊ
ಕ ಕ दр ࡅܴ ࡅܴ நएҙܻب ػ ѾҴࢿҕ ಕо֎౭࠳ۢ ࡅܰѱࠁৈ
ҕࣻহ
ࢸറप೯ וܽੋఠ֔ /FUXPSL5ZQF &%(& ਊ ਊറ
ਊറ ਊ ࢸറप೯ ؊וܽੋఠ֔ /FUXPSL5ZQF (4.
18"ী೧ۧѱוԕणפ
18"৬ೞ࠳ܻ٘জীࢲח 1SPT ࣘبоѐࢶؽ நदҙܻоמ ӝઓೞ࠳ܻ٘ਢ࠭ীҕࣻহਊоמ $POT
J04ਢ࠭ীࢲח4FSWJDF8PSLFSܳਗೞঋ ইܐо݆ঋ
Ѿۿ ೠػदр ੋܻࣗझ જࢎਊ҃ࢶ ӓੋਢ࠭بੑ 18"ب જࢶఖؼࣻ
5)"/,4 ߅ࢳ ޖо҅ࣘߓҊरউ٘۽٘ѐߊ ਬ ࢜۽Ѧदب೧ࠁҊरਢѐߊ !NJOTFPLLS !UJOZKJO JBNNJOTFPLQBSL!HNBJMDPN CBSBN!HNBJMDPN
IUUQTXMTENMCMPHNF IUUQTNJOTFPLLSHJUIVCJP